git bash没有意识到该文件已在push上从repo中删除

时间:2014-05-02 20:56:34

标签: git bash file svn github

我有一个回购,其中我有一个非常大的文件

  

资产/ VIDS / bigfile.mp4

首先,我正在跟踪此文件夹及其更改,并在此文件夹包含此特定大文件时进行了多次提交。从那时起,我手动删除了文件,然后必须进入并从被跟踪中删除。 ,因为然后我还将资产/视频/添加到我的.gitignore,因为它不应该被跟踪。

好吧,当我第一次尝试将这个项目推送到我的github时,在写入对象时,它会挂起大约46%并试图加载一个大文件然后在它意识到文件超过100mb时抛出错误信息。它告诉我文件是assets / vids / bigfile.mp4,但是这个文件夹甚至不被跟踪了?它试图推送的文件甚至不再存在于该位置。 (我不想要它)

我使用此命令显示repo中的所有文件。

  

git ls-tree --full-tree -r HEAD

我添加到.gitignore的文件夹不在这里,所以它仍然试图推送此文件是一个谜。

关于为什么它出现在回购中的任何想法仍然存在?

我试过了

  

git commit -a

然后被推,但它仍然给我这个问题。

1 个答案:

答案 0 :(得分:1)

由于Git会跟踪项目的完整历史记录,因此任何已提交的文件都会成为您的回购的永久部分。这是设计的;想象一下,你正在Github上浏览你的项目。在您停止跟踪该文件之前,您将返回历史记录。当然它会在那里,对吧?

问题的解决方案是the git filter-branch command,可用于从历史记录中清除文件。假设您要消除任何已提交文件夹的痕迹,您应该能够使用这样的命令(可能需要调整,我暂时没有这样做):

git filter-branch --tree-filter 'rm -rf assets/vids' HEAD

一如往常在重写历史时,请小心!