我有一些大文件在 git 中被意外跟踪。直到后来很多次提交我才意识到。我将这些文件移至 git LFS 中,但现在我想将它们从正常的 git 数据库中删除,因为它们的增量占用了大量空间。
最佳答案
请注意,所有解决方案都是历史重写,这需要与拥有存储库克隆的每个人进行一定程度的协调,以避免您的工作被撤消。
三个工具可以处理这个问题,每个工具都有优点和缺点:
最适合您的目的的是lfs migrate
。 https://github.com/bozaro/git-lfs-migrate
另一个选择是 BFG。根据我的经验,与 lfs-migrate 相比,它在某些方面做得更好,而在其他方面则不然。如果您不关心破坏历史记录,它还可以选择仅将大文件删除而不用指针文件替换。 https://rtyley.github.io/bfg-repo-cleaner/
或者,如果您想坚持使用 git 内置命令,可以使用 git filter-branch
(但它会更慢、更困难)。您可以设置一个index-filter
来git rm --cached --ignore-unmatch
受影响的路径(如果它们不移动)。这可能会很慢并且会破坏受影响的提交。您可以使用 tree-filter
来使用适当的指针文件替换受影响的路径,并插入合适的 .gitattributes
文件。这甚至更慢(并且可能更难做到正确。)
关于git - 将文件移至 LFS 后如何从 git 数据库中删除该文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44884414/