如何删除git-lfs跟踪的文件并释放存储配额?

luc*_*mia 26 git github git-lfs

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

删除git历史中文件的参考点是否适用于这种情况?

mge*_*ear 17

找到了这个新方法(2023)

在此输入图像描述 在此输入图像描述


Wad*_*der 11

目前似乎没有一种很好的方法可以从中删除大型资产git-lfs.GitHub目前的建议是使用名为The BFG的工具从您的仓库中完全删除文件的所有存在.

据推测,当Github接下来运行git的垃圾收集时,它将从lfs存储中删除.

有关详细信息,请参阅https://help.github.com/articles/working-with-large-files/

  • 应该注意的是,您的所有历史记录都将发生变化,这意味着所有提交ID都会随处变化.如果您的回购被其他人拉回并且他们正在努力回馈,那么这可能会出现严重问题. (6认同)
  • 无法从 Github 的 LFS 存储中清除旧文件是一个严重的问题!一个 500MB 的文件很快就会吃掉 50GB 的付费配额,因为对文件的每次更改都会永久保留。唯一的“解决方案”是删除整个存储库! (4认同)

Chr*_*ris 10

Wader给出的答案与问题无关.

github文章的给定链接是关于直接检入git repo的大文件,这与git-lfs不同!

至于问题:如何处理这种情况取决于底层存储服务器.git-lfs支持可以由不同的服务提供,例如GitHub或GitLab.

GitLab存储git-lfs文件而不是每个存储库.它们由SHA-256哈希值存储.如果在多个存储库(例如克隆)中使用相同的文件,则仅存储一次.它完全取决于GitLab如何处理引用的文件,应该在手册中查找.

根据GitHubs文档(https://help.github.com/articles/removing-files-from-git-large-file-storage/),建议删除并重新创建存储库:"从中删除Git LFS对象存储库,删除并重新创建存储库.当您删除存储库时,任何相关的问题,星标和分支也将被删除."

  • 那是一个可怕的解决方案. (15认同)
  • 我不敢相信这仍然是 2022 年 Github 推荐的解决方案。 (4认同)

Bra*_*ndt 9

Chris给出的答案并不准确;结合 0xcaff 的评论(“这是一个糟糕的解决方案”),它可能会误导缺乏经验的用户(或心烦意乱的读者)。

正确答案是韦德和克里斯的混合。

我刚刚解决了一个案例,我想镜像一个曾经使用过 LFS 的存储库(我们称之为存储库REPO-1),但尚未从大文件中清除历史记录。

上个月的某个时刻,我删除了对 LFS 的REPO-1支持git lfs uninstall。这对于后续的git clones 来说效果很好(不再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. 从存储库中卸载 LFS;
  2. 清理回购的历史记录;
  3. 删除(或重命名)旧的(github)存储库,创建一个新存储库并将清理后的存储库推入其中。

1

卸载LFS 是一个简单的命令例如git lfs uninstall即可完成。

2

清理存储库的历史有点可怕,但与Github 文档的git filter-branch3项配合得很好 - 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
Run Code Online (Sandbox Code Playgroud)

3

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

  • 当然,代码保持完整,但事实仍然是,删除 Github 上的存储库意味着你会丢失所有星星、问题、分叉等。这非常残酷!免费和每月 5 美元的套餐非常小(1GB 和 50GB),因此如果您确实需要 LFS,那么您会遇到困难,然后发现唯一的选择是核。 (21认同)
  • 真实的故事,@mpoisot,感谢您指出这一点! (3认同)