Git过滤器分支说“没有这样的文件”,但ls说不然?

时间:2014-09-05 02:03:46

标签: git bash ubuntu-12.04

我不小心提交了一个文件local.py,其中包含密码信息。

我尝试使用filter-branch删除文件,但我被告知该文件不存在。 ls另有说法。我确信这很简单但有人可以解释原因吗?

这是ls确认文件存在。

(spsp)user99@jaffa:~/dev/antibes$ ls -l ferrat_project/ferrat_project/settings/local.py
-rw-rw-r-- 1 user99 user99 458 Sep  5 10:44 ferrat_project/ferrat_project/settings/local.py

这里的git filter-branch失败了,因为找不到文件。

(spsp)user99@jaffa:~/dev/antibes$ git filter-branch --tree-filter 'git rm ferrat_project/ferrat_project/settings/local.py' HEAD
Rewrite 123454323asdj157f2cf6a83e6f2777e85da5b0b (1/52)rm: cannot remove ‘ferrat_project/ferrat_project/settings/local.py’: No such file or directory
tree filter failed: git rm ferrat_project/ferrat_project/settings/local.py

编辑1:回答评论中提出的一些问题。

该错误消息中的修订版本是否存在该文件?

引用的修订版是对存储库的第一次提交。该文件在那时不存在。

您何时添加此文件?

该文件(在第三次提交中)被意外添加到存储库中。存储库中有52个提交。


编辑2:我为回应评论而尝试的东西。 我重新阅读了filter-branch手册页,随后尝试了这个:

user99@jaffa:~/dev/antibes$ git filter-branch --tree-filter 'rm -f ferrat/ferrat/settings/local.py' HEAD
Rewrite 002198729d953ee70a63f2ed68011b3ffb165043 (52/52)
Ref 'refs/heads/master' was rewritten

哪个至少有用,但当然实际上删除了我试图隐藏的文件。我没有太担心这个,因为我在开始之前已经进行了备份,因此我对.gitignore进行了编辑,以阻止local.py重新出现,然后从我的备份中复制local.py并尽可能地...告诉......一切都很好。

我很确定我应该使用'git rm'代替'rm',也许还有其他一些我做错了但这至少看起来有效。

0 个答案:

没有答案