很快,sourceforge将恢复我的项目git repository。
我从它消失的前一天开始“拉-a”;所以我相信我的本地副本没有数据丢失。
我想做的是将我的本地副本与即将恢复的sourceforge主仓库进行“深度比较”,以确保我们绝对同步在提交任何新的更改之前。测试历史是否一致;具有相同哈希值的相同对象;以及任何可能阻止未来悲痛的事情。
像(不存在的)“git compare-trees --verify ....”
我想可能更容易重命名sourceforge repo,然后将我的本地副本作为新主人推送,但这让我觉得不够优雅。
答案 0 :(得分:2)
正如其他人在评论中提到的那样,你真的只需要检查SHA-1值(并运行git fsck
以使它将找到每个对象的SHA-1名称与当前的SHA-1进行比较每个对象 1 )。
因为git使用Merkle Tree的形式,如果一个仓库中的master
分支的SHA-1与另一个仓库中的分支的SHA-1匹配,则可以合理地确定< sup> 2 整个提交链在两个存储库中都是逐位相同的。因此,比较每个存储库上的简单git for-each-ref
运行的输出将起到作用。
1 如果这些内部不匹配,您会看到(来自the git-fsck documentation):
sha1 mismatch <object>
The database has an object who’s sha1 doesn’t match the database
value. This indicates a serious data integrity problem.
2 不同输入的任意两个SHA-1之间偶然匹配的可能性是2 160 中的一个(2 160 是超过10 48 ,所以这是1.465 quindecillion中的一个。随着物体数量的增加,机会由于"birthday problem"而迅速上升,但实际上,它很少被完全忽视。获得真正碰撞的唯一方法是故意这样做,那就是still too hard。