我有一个回购,其中我有一个非常大的文件
资产/ VIDS / bigfile.mp4
首先,我正在跟踪此文件夹及其更改,并在此文件夹包含此特定大文件时进行了多次提交。从那时起,我手动删除了文件,然后必须进入并从被跟踪中删除。 和,因为然后我还将资产/视频/添加到我的.gitignore,因为它不应该被跟踪。
好吧,当我第一次尝试将这个项目推送到我的github时,在写入对象时,它会挂起大约46%并试图加载一个大文件然后在它意识到文件超过100mb时抛出错误信息。它告诉我文件是assets / vids / bigfile.mp4,但是这个文件夹甚至不被跟踪了?它试图推送的文件甚至不再存在于该位置。 (我不想要它)
我使用此命令显示repo中的所有文件。
git ls-tree --full-tree -r HEAD
我添加到.gitignore的文件夹不在这里,所以它仍然试图推送此文件是一个谜。
关于为什么它出现在回购中的任何想法仍然存在?
我试过了
git commit -a
然后被推,但它仍然给我这个问题。
答案 0 :(得分:1)
由于Git会跟踪项目的完整历史记录,因此任何已提交的文件都会成为您的回购的永久部分。这是设计的;想象一下,你正在Github上浏览你的项目。在您停止跟踪该文件之前,您将返回历史记录。当然它会在那里,对吧?
问题的解决方案是the git filter-branch command,可用于从历史记录中清除文件。假设您要消除任何已提交文件夹的痕迹,您应该能够使用这样的命令(可能需要调整,我暂时没有这样做):
git filter-branch --tree-filter 'rm -rf assets/vids' HEAD
一如往常在重写历史时,请小心!