如何删除git-lfs跟踪的文件并释放存储配额?
How to delete a file tracked by git-lfs and release the storage quota?
如何删除不再使用的文件并将存储释放回 github lfs 配额?
在这种情况下删除git历史中文件的引用点是否有效?
目前似乎没有从 git-lfs
中删除大型资产的好方法。 GitHub 目前的建议是使用一个名为 The BFG 的工具从你的 repo 中完全删除所有存在的文件。
据推测,当 git 的垃圾收集是 GitHub 的下一个 运行 时,它将从 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 存储,尽管目前这似乎无法正常工作。 This 问题自 2017 年以来一直未解决,但没有解决。
BitBucket 在存储库设置中有一个部分可以清理 lfs 文件。 https://www.atlassian.com/git/tutorials/git-lfs#deleting-remote-files
Wader给出的答案与问题无关
给定 link 的 github 文章是关于直接签入 git 存储库的大文件,这与 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 a repository, delete and recreate the repository. When you delete a repository, any associated issues, stars, and forks are also deleted."
克里斯给出的答案不准确;结合 0xcaff 的评论(“这是一个糟糕的解决方案”),它可能会误导没有经验的用户(或分心reader)。
正确答案是韦德和克里斯的混合答案。
我刚刚解决了一个案例,我想镜像一个存储库(让我们称之为 REPO-1
),曾几何时 使用 LFS,但还没有成为历史-从大文件中清除。
At some moment in the last month I removed support for LFS in REPO-1
with git lfs uninstall
. And that was working fine for subsequent git clone
s (i.e., no git-lfs
anymore). But today when I tried to pull
a previously push --mirror
version of REPO-1
I got messages Smudge error: Error downloading <big-filename> ... Object does not exist on the server: [404] Object does not exist on the server
因此,如果您想摆脱 LFS 和任何对曾经跟踪的文件的引用,您必须:
- 从存储库中卸载 LFS;
- 清理回购历史;
- 删除(或重命名)旧的 (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。当您将本地(干净)版本推送到新的空白存储库时,它就像那样(deletion/creation)从未发生过。
如何删除不再使用的文件并将存储释放回 github lfs 配额?
在这种情况下删除git历史中文件的引用点是否有效?
目前似乎没有从 git-lfs
中删除大型资产的好方法。 GitHub 目前的建议是使用一个名为 The BFG 的工具从你的 repo 中完全删除所有存在的文件。
据推测,当 git 的垃圾收集是 GitHub 的下一个 运行 时,它将从 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 存储,尽管目前这似乎无法正常工作。 This 问题自 2017 年以来一直未解决,但没有解决。
BitBucket 在存储库设置中有一个部分可以清理 lfs 文件。 https://www.atlassian.com/git/tutorials/git-lfs#deleting-remote-files
Wader给出的答案与问题无关
给定 link 的 github 文章是关于直接签入 git 存储库的大文件,这与 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 a repository, delete and recreate the repository. When you delete a repository, any associated issues, stars, and forks are also deleted."
克里斯给出的答案不准确;结合 0xcaff 的评论(“这是一个糟糕的解决方案”),它可能会误导没有经验的用户(或分心reader)。
正确答案是韦德和克里斯的混合答案。
我刚刚解决了一个案例,我想镜像一个存储库(让我们称之为 REPO-1
),曾几何时 使用 LFS,但还没有成为历史-从大文件中清除。
At some moment in the last month I removed support for LFS in
REPO-1
withgit lfs uninstall
. And that was working fine for subsequentgit clone
s (i.e., nogit-lfs
anymore). But today when I tried topull
a previouslypush --mirror
version ofREPO-1
I got messagesSmudge error: Error downloading <big-filename> ... Object does not exist on the server: [404] Object does not exist on the server
因此,如果您想摆脱 LFS 和任何对曾经跟踪的文件的引用,您必须:
- 从存储库中卸载 LFS;
- 清理回购历史;
- 删除(或重命名)旧的 (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。当您将本地(干净)版本推送到新的空白存储库时,它就像那样(deletion/creation)从未发生过。