Git 忽略并更改历史记录(在 Windows 上)
Git ignore and changing the history (on Windows)
我已经在这里阅读了几本关于此的 post(例如 Git ignore & changing the past, How to remove files that are listed in the .gitignore but still on the repository?, and Applying .gitignore to committed files),但它们有几个问题:
- 仅适用于 Linux 的命令。
- 不完整的命令(比如我链接到的第一个 post)。
- 仅限一个文件。
我几乎没有使用 Git 的经验,所以我希望在这里得到一些帮助。
我基本上想做的是挽救我的一个项目历史。它目前是 Hg,我用 Hg-Git 将它转换为 Git(一切都非常简单),它包括历史记录(太棒了!)。但是,我还添加了一个 .gitignore 文件并添加了几个我想要 completely 从历史记录中消失的新文件和文件夹(比如 bin 和 obj 文件夹,还有来自 ReSharper 的文件)。所以我正在寻找一种方法将 .gitignore 文件应用到我所有的历史记录中。这些命令应该适用于 Windows,因为我无意为此安装 Linux。
无需在历史记录中添加 .gitignore(这样做没有任何附加价值),只需为您以后的提交添加即可。
要删除历史记录中的文件和目录,请使用 bfg-repo-cleaner,它快速、简单并且在 Windows 上运行良好(在 scala 中完成)。
它会为您完成这项工作!
这对我有用:
- 安装 hg-git.
- cd HgFolder
- hg bookmark -r default master
- mkdir ../Git文件夹
- cd ../Git文件夹
- git init --bare
- cd ../Hg文件夹
- hg push ../GitFolder
- 将所有文件从 GitFolder 移动到“.git”文件夹(在此 GitFolder 中)并将此文件夹设置为隐藏(不是子文件夹和文件)。
- cd ../Git文件夹
- git 初始化
- git远程添加源https://url.git
- 复制所有当前内容(包括.gitignore)到GitFolder。
- git 添加 .
- git commit -m "Added existing content and .gitignore".
- git filter-branch --index-filter "git rm --cache d -r --ignore-unmatch 'LINES' 'FROM' 'GITIGNORE'" --prune-empty --tag-name-filter cat -- --all
- git rm -r --cached .
- git 添加 .
- git gc --prune=now --aggressive
- git push origin master --force
可能有一种更简单的方法可以做到这一点,它可能并不完美,但它得到了我想要的结果。
我已经在这里阅读了几本关于此的 post(例如 Git ignore & changing the past, How to remove files that are listed in the .gitignore but still on the repository?, and Applying .gitignore to committed files),但它们有几个问题:
- 仅适用于 Linux 的命令。
- 不完整的命令(比如我链接到的第一个 post)。
- 仅限一个文件。
我几乎没有使用 Git 的经验,所以我希望在这里得到一些帮助。
我基本上想做的是挽救我的一个项目历史。它目前是 Hg,我用 Hg-Git 将它转换为 Git(一切都非常简单),它包括历史记录(太棒了!)。但是,我还添加了一个 .gitignore 文件并添加了几个我想要 completely 从历史记录中消失的新文件和文件夹(比如 bin 和 obj 文件夹,还有来自 ReSharper 的文件)。所以我正在寻找一种方法将 .gitignore 文件应用到我所有的历史记录中。这些命令应该适用于 Windows,因为我无意为此安装 Linux。
无需在历史记录中添加 .gitignore(这样做没有任何附加价值),只需为您以后的提交添加即可。
要删除历史记录中的文件和目录,请使用 bfg-repo-cleaner,它快速、简单并且在 Windows 上运行良好(在 scala 中完成)。
它会为您完成这项工作!
这对我有用:
- 安装 hg-git.
- cd HgFolder
- hg bookmark -r default master
- mkdir ../Git文件夹
- cd ../Git文件夹
- git init --bare
- cd ../Hg文件夹
- hg push ../GitFolder
- 将所有文件从 GitFolder 移动到“.git”文件夹(在此 GitFolder 中)并将此文件夹设置为隐藏(不是子文件夹和文件)。
- cd ../Git文件夹
- git 初始化
- git远程添加源https://url.git
- 复制所有当前内容(包括.gitignore)到GitFolder。
- git 添加 .
- git commit -m "Added existing content and .gitignore".
- git filter-branch --index-filter "git rm --cache d -r --ignore-unmatch 'LINES' 'FROM' 'GITIGNORE'" --prune-empty --tag-name-filter cat -- --all
- git rm -r --cached .
- git 添加 .
- git gc --prune=now --aggressive
- git push origin master --force
可能有一种更简单的方法可以做到这一点,它可能并不完美,但它得到了我想要的结果。