Dev*_*dse 7 git visual-studio git-clone git-lfs azure-pipelines
我一直在尝试通过将一些文件移动到 git LFS 来减小 Git 存储库的大小。再加上几个 100 个命令,这里我们的文件位于 git LFS 中,并且我的 git 提交中不再有这些文件的历史记录。
然而,每当我克隆存储库时,我仍然会下载大约 3GB 的对象。我通过在 Visual Studio Team Services 中创建一个新存储库来解决这个问题,在本地修剪和垃圾收集我的存储库,然后推送到那里后,它减少到 300mb。(在这篇文章中本地执行此操作的命令:Git:什么是悬空提交/blob 以及它们来自哪里?)
但是我无法想象您总是必须删除/重新创建完整的存储库才能删除悬而未决的提交。
我还尝试过执行 git init,然后将其推送到现有存储库上,但它只会进一步增加对象数量。
对于也遇到类似问题的任何人,这些是我执行的用于创建新存储库而不需要悬空提交的命令,但是我想了解如何在现有存储库中执行此操作而不必删除它:
git clone https://avavedse.visualstudio.com/Test/_git/TestRepository
cd blahblah
git reflog expire --expire=now --all
git gc --prune=now
git remote add newrepo https://avavedse.visualstudio.com/Test/_git/TestRepositoryNewEdition
git push newrepo
Run Code Online (Sandbox Code Playgroud)
GitHub 将定期垃圾收集无法从顶级引用访问的对象。所以随着时间的推移,它们就会消失。但这并不能保证。这是我找到的最好的信息。
您可以手动将引用日志到期日期更正为现在并运行垃圾收集器:
git reflog expire --expire=now --all
git gc --prune=now
Run Code Online (Sandbox Code Playgroud)
但这只会影响本地仓库。
显然,垃圾收集器远非理想,除非您不介意删除和创建新的存储库并丢失所有问题、拉取请求等,否则您必须联系Github 支持:
您可以通过联系 GitHub 支持或 GitHub 高级支持来永久删除 GitHub 上拉取请求中的缓存视图和敏感数据引用。[docs.github.com]
实际上,当您执行git reflog expire --expire=now --allgit时gc --prune=now,悬挂的提交已被删除。您可以通过以下方式仔细检查git fsck --full。如果输出不\xe2\x80\x99t 显示提交,则意味着没有悬空提交。
仓库大小显然没有减少的另一个原因是您没有删除 git 历史记录中的 LFS 文件。您可以通过以下方式重写历史:
\n\ngit filter-branch --force --index-filter \'git rm --cached --ignore-unmatch filename --prune-empty --tag-name-filter cat -- --all\ngit push -f\nRun Code Online (Sandbox Code Playgroud)\n\n有关将文件从 git 移动到 git-lfs 的更多详细信息,您可以参考将存储库中的文件移动到 git-lfs。
\n| 归档时间: |
|
| 查看次数: |
6014 次 |
| 最近记录: |