如何删除不再使用的文件并将存储释放回 github lfs 配额?
在这种情况下删除 git history 中文件的参考点是否有效?
目前似乎没有从git-lfs
. GitHub 目前的建议是使用一个名为BFG的工具从你的 repo 中完全删除该文件的所有存在。
据推测,当 GitHub 下次运行 git 的垃圾收集时,它将从 lfs 存储中删除。
有关更多信息,请参阅https://help.github.com/en/github/managing-large-files/removing-files-from-git-large-file-storage
GitHub 已经更新了他们的文档,明确指出如果不删除存储库就无法释放 git-lfs 存储。https://help.github.com/en/github/managing-large-files/removing-files-from-git-large-file-storage
他们唯一的建议是仍然使用 BFG 工具从存储库中删除文件,这将在克隆时减小存储库的大小,但在您删除存储库之前仍将计入您的 git-lfs 配额。
GitLab 再次建议使用 BFG 工具,并将自动清理任何提交中未引用的任何文件的 lfs 存储,尽管目前这似乎无法正常工作。此问题自 2017 年以来一直开放,没有解决方案。
BitBucket 在存储库设置中有一个部分,您可以清理 lfs 文件。https://www.atlassian.com/git/tutorials/git-lfs#deleting-remote-files
韦德给出的答案与问题无关。
给定的 github 文章链接是关于直接签入 git repo 的大文件,这与 git-lfs 不同!
至于问题:如何处理这种情况取决于底层存储服务器。git-lfs 支持可以由不同的服务提供,例如 GitHub 或 GitLab。
GitLab 不按存储库存储 git-lfs 文件。它们由它们的 SHA-256 哈希值存储。如果在多个存储库(例如克隆)中使用相同的文件,则它只存储一次。它完全取决于 GitLab 如何处理引用的文件,应该在手册中查找。
根据 GitHub 文档(https://help.github.com/articles/removing-files-from-git-large-file-storage/),建议删除并重新创建一个存储库:“To remove Git LFS objects from存储库,删除并重新创建存储库。当您删除存储库时,任何相关的问题、星号和分叉也会被删除。
克里斯给出的答案并不准确;结合 0xcaff 的评论(“这是一个糟糕的解决方案”),它可能会误导没有经验的用户(或分心的读者)。
正确答案是韦德和克里斯的混合体。
我刚刚解决了一个我想镜像一个存储库(我们称之为它REPO-1
)的案例,该存储库曾经使用过 LFS,但尚未从大文件中清除历史记录。
在上个月的某个时刻,我删除了对 LFS 的
REPO-1
支持git lfs uninstall
。这对于后续git clone
的 s 工作正常(即不再git-lfs
)。但是今天当我尝试pull
使用以前push --mirror
的版本时,REPO-1
我收到了消息Smudge error: Error downloading <big-filename> ... Object does not exist on the server: [404] Object does not exist on the server
因此,如果您想摆脱 LFS 以及对曾经跟踪的文件的任何引用,您必须:
卸载LFS 是一个简单的命令,比如git lfs uninstall就可以了。
清理 repo 的历史有点吓人,但可以很好地与Github 文档的第3git filter-branch
项一起使用 - https://help.github.com/en/articles/removing-sensitive-data-from-a-repository - - 应该足够了:
$ git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch FILENAME-1 FILENAME-2 FILENAME-3" \
--prune-empty --tag-name-filter cat -- --all
存储库的删除和重新创建并不像看起来那样具有破坏性,请记住,您的本地存储库是 Github 中内容的完全独立、自我维持的克隆。当您将本地(干净)版本推送到新的空白存储库时,就像(删除/创建)从未发生过一样。