10

我试图从 Git 历史记录中清除项目 bin 目录。我已经将 'bin' 添加到 .gitignore 并$git rm --cached -r bin成功运行。现在我尝试使用 GitHub 帮助页面中推荐的命令来清除历史记录:

$ git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch bin' \
  --prune-empty --tag-name-filter cat -- --all

但这会导致错误:

Rewrite <hash> (1/164) fatal: not removing 'bin' recursively without -r
index filter failed: git rm --cached --ignore-unmatch bin
rm: cannot remove 'c:/pathToMyLocalRepo/.git-rewrite/revs': Permission denied
rm: cannot remove directory 'c:/pathToMyLocalRepo/.git-rewrite': Directory not empty

没有其他程序保持 /revs 打开。/revs 在指定路径中不存在并且 .git-rewrite空。

我不确定我应该在哪里添加-r?否则命令不正确吗?

当然,我确实需要将 bin 本身保存在本地本地仓库中,因为这是我的工作目录。

谢谢

4

2 回答 2

6

好的,我需要做的就是将 -r 添加到 rm 命令部分(如下所示)。我这是因为 bin 是一个目录而不是文件,因此必须递归删除它,否则它包含的文件(或有关它们的信息)将被孤立。

$ git filter-branch --force --index-filter \
  'git rm --cached -r --ignore-unmatch bin' \
  --prune-empty --tag-name-filter cat -- --all

我按照以下内容将更改推送到 github 上的远程仓库

$ git push origin master --force
于 2013-09-11T17:09:57.840 回答
2

唯一有意义的地方是git rm. 我自己没有尝试过,但我认为应该可以吗?

$ git filter-branch --force --index-filter \
  'git rm -r --cached --ignore-unmatch bin' \
  --prune-empty --tag-name-filter cat -- --all
于 2013-09-11T17:08:33.257 回答