以下是一种情况。
托管在某个git服务提供商(例如Bitbucket)上的项目源代码。 - 尺寸超过1GB 我们将所有工作迁移到新的git服务提供程序,并进行一些修剪以删除旧的大文件和对象(例如Github) - 大小为500MB。
过渡几周以来。突然之间,回购大小超过1.8GB,看到我们有一些旧的对象被删除作为旧回购的一部分。
现在我如何找到导致此问题的提交/推送?我知道它何时发生,但无法查明可能导致此问题的提交或分支。还有一种更简单的方法来恢复推动以使回购尺寸恢复正常吗?
另一个问题是,如何防止这些物体被意外再次推回?
我的搜索使我得到了相关答案,但空手而归。
参考文献:
答案 0 :(得分:0)
Git非常注重向数据库添加新东西(提交及其底层对象)的想法,而不会删除任何旧东西。
当你做设法删除一些旧的东西时,如果Git再次遇到它们,它会将它们视为 new 的东西并将它们重新添加。你如果你愿意,可以将此视为“重新感染”。 具有“感染”的存储库的每个副本都是“具有传染性”,触摸其中任何一个(通过git fetch
或git push
)都可以带回您认为对象的对象已经摆脱了。
现在如何找到导致此问题的提交/推送?
找到导致它的特定提取或推送很难不可能。查找包含大对象的提交是可能的;查看您链接的答案以及其中的其他链接。
还有一种更简单的方法可以恢复推送以使回购尺寸恢复正常吗?
您必须抛弃包含大对象的提交,并且如果您希望保留的提交依赖于那些早期提交,则将后面的提交复制到不再依赖于新提交的新提交。早些时候提交。这就是git filter-branch
的作用。一旦你没有指向或拥有其提交祖先链的分支提示,那么拥有大对象的提交就可以重新打包并收缩存储库。
The BFG Cleaner更容易使用(它为您完成所有这些),但我从未使用过它。
...如何防止这些物体被意外地再次推回?
这比较棘手。有许多方法在不同程度上起作用: