如何删除永不使用的文件并将存储释放回github lfs配额?
在这种情况下,删除git history中文件的参考点是否有效?
答案 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和对曾经跟踪的文件的任何引用,则必须:
卸载 LFS是一个简单的命令,例如git lfs uninstall即可完成。
清理回购协议的历史记录有点吓人,但可以与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
删除和重新创建存储库似乎没有那么大的破坏性,请记住,您的本地存储库与Github中的内容完全是独立的,自持的 clone 。当您将本地(干净)版本推送到新的空白存储库时,就像(删除/创建)从未发生过。