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

时间:2016-01-03 17:08:45

标签: git github git-lfs

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

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

3 个答案:

答案 0 :(得分:11)

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

当Github接下来运行git的垃圾收集时,可能会将其从lfs存储中删除。

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

答案 1 :(得分:9)

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对象,请删除并重新创建存储库。删除存储库时,也会删除任何关联的问题,星标和分支。"

答案 2 :(得分:0)

克里斯给出的答案不准确;结合0xcaff的评论(“ 那是一个糟糕的解决方案”),可能会误导经验不足的用户(或分心的读者)。

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

我刚刚解决了一个情况,我想镜像一个存储库(我们称它为REPO-1),该存储库曾经使用但没有从大型仓库中清除历史记录文件。

  

上个月的某个时刻,我用REPO-1删除了git lfs uninstall中对LFS的支持。这对于后续的git clone来说很好(,现在不再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

清理回购协议的历史记录有点吓人,但可以与git filter-branch一起使用,Github文档的项目 3 -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中的内容完全是独立的,自持的 clone 。当您将本地(干净)版本推送到新的空白存储库时,就像(删除/创建)从未发生过。