53

如何删除不再使用的文件并将存储释放回 github lfs 配额?

在这种情况下删除 git history 中文件的参考点是否有效?

4

3 回答 3

27

目前似乎没有从git-lfs. GitHub 目前的建议是使用一个名为BFG的工具从你的 repo 中完全删除该文件的所有存在。

据推测,当 GitHub 下次运行 git 的垃圾收集时,它将从 lfs 存储中删除。

有关更多信息,请参阅https://help.github.com/en/github/managing-large-files/removing-files-from-git-large-file-storage

编辑 2019-11-20

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

于 2016-01-03T23:39:22.107 回答
18

韦德给出的答案与问题无关。

给定的 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存储库,删除并重新创建存储库。当您删除存储库时,任何相关的问题、星号和分叉也会被删除。

于 2018-01-26T13:58:44.493 回答
5

克里斯给出的答案并不准确;结合 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 以及对曾经跟踪的文件的任何引用,您必须:

  1. 从 repo 中卸载 LFS;
  2. 清理回购的历史;
  3. 删除(或重命名)旧的(github)存储库,创建一个新存储库并将清理后的存储库推入其中。

1

卸载LFS 是一个简单的命令,比如git lfs uninstall就可以了。

2

清理 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

3

存储库的删除和重新创建并不像看起来那样具有破坏性,请记住,您的本地存储库是 Github 中内容的完全独立、自我维持的克隆。当您将本地(干净)版本推送到新的空白存储库时,就像(删除/创建)从未发生过一样。

于 2019-09-05T15:46:47.080 回答