关于git lfs:如何将文件移入LFS后从git数据库中删除?

How do you remove a file from your git database after moving it into LFS?

本问题已经有最佳答案,请猛点这里访问。

我有一些在Git中被意外跟踪的大文件。直到后来我才意识到许多承诺。我把这些文件移到了git-lfs中,但是现在我想把它们从我的普通git数据库中删除,因为它们的增量占用了大量的空间。


请注意,所有解决方案都是历史重写,这将需要与所有拥有repo克隆的人进行一定程度的协调,以避免您的工作被撤消。

有三种工具可以处理这一问题,每种工具都有优缺点:

最适合您的目的是lfs migrate。https://github.com/bozaro/git-lfs-migrate

另一个选择是bfg。根据我的经验,与LFS迁移相比,它在某些方面做得更好,而其他方面做得不好。如果您不想破坏历史记录,它还可以选择在不替换指针文件的情况下直接删除大文件。https://rtyley.github.io/bfg-repo-cleaner/

或者,如果您想坚持使用git内置命令,那么有git filter-branch,但它会变得越来越慢和困难。你可以设置一个index-filtergit rm --cached --ignore-unmatch受影响的路径(如果它们不移动)。这可能很慢,会破坏受影响的提交。您可以使用一个tree-filter,用适当的指针文件替换受影响的路径,并插入一个适当的.gitattributes文件。这甚至更慢(而且可能更难纠正)。