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),但它们有几个问题:

我几乎没有使用 Git 的经验,所以我希望在这里得到一些帮助。

我基本上想做的是挽救我的一个项目历史。它目前是 Hg,我用 Hg-Git 将它转换为 Git(一切都非常简单),它包括历史记录(太棒了!)。但是,我还添加了一个 .gitignore 文件并添加了几个我想要 completely 从历史记录中消失的新文件和文件夹(比如 binobj 文件夹,还有来自 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

可能有一种更简单的方法可以做到这一点,它可能并不完美,但它得到了我想要的结果。