git - 将文件移至 LFS 后如何从 git 数据库中删除该文件?

标签 git git-lfs

我有一些大文件在 git 中被意外跟踪。直到后来很多次提交我才意识到。我将这些文件移至 git LFS 中,但现在我想将它们从正常的 git 数据库中删除,因为它们的增量占用了大量空间。

最佳答案

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

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

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

另一个选择是 BFG。根据我的经验,与 lfs-migrate 相比,它在某些方面做得更好,而在其他方面则不然。如果您不关心破坏历史记录,它还可以选择仅将大文件删除而不用指针文件替换。 https://rtyley.github.io/bfg-repo-cleaner/

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

关于git - 将文件移至 LFS 后如何从 git 数据库中删除该文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44884414/

相关文章:

git - 将旧分支中的一些特定文件 merge 到我当前的分支

python - 将 PyCharm 与 Git 一起使用时,我应该忽略 .idea 文件夹吗?

git - 如何克隆包含 Git LFS 文件的存储库?

git - 大文件不变时 Git LFS 的优势?

git LFS : Where are the files stored before they are pushed?

git 分支实践

git - 如何在 Git 中执行 "hg backout X"?

css - 在 phpstorm 中使用 git 我需要提交才能看到更改吗?

tortoisegit - 如何在 TortoiseGit Git 克隆对话框中默认选中 LFS 复选框?

git - 未安装 Git LFS 时会发生什么?