验证git完整性

验证git完整性,git,compare,repository,Git,Compare,Repository,很快sourceforge将恢复我的项目git存储库 在它消失的前一天,我有一个“拉-a”;因此,我确信我的本地副本上没有数据丢失 我想做的是将我的本地副本与即将恢复的sourceforge主repo进行“深入比较”,以确保在提交任何新更改之前,我们完全同步。测试历史是否一致;具有相同哈希的相同对象;还有其他可能防止未来悲伤的事情 类似于(不存在的)“git比较树--验证…” 我想重命名sourceforge repo可能更容易,然后将我的本地副本作为新的主副本推送,但这让我觉得不够优雅。正如其

很快sourceforge将恢复我的项目git存储库

在它消失的前一天,我有一个“拉-a”;因此,我确信我的本地副本上没有数据丢失

我想做的是将我的本地副本与即将恢复的sourceforge主repo进行“深入比较”,以确保在提交任何新更改之前,我们完全同步。测试历史是否一致;具有相同哈希的相同对象;还有其他可能防止未来悲伤的事情

类似于(不存在的)“git比较树--验证…”


我想重命名sourceforge repo可能更容易,然后将我的本地副本作为新的主副本推送,但这让我觉得不够优雅。

正如其他人在评论中提到的那样,您只需要检查SHA-1值(并运行
git fsck
,使其将找到每个对象的SHA-1名称与每个对象1的当前SHA-1进行比较)

由于git使用的形式是,如果一个repo中分支(如
master
)的SHA-1与另一个repo中分支的SHA-1相匹配,则可以合理地确定2两个存储库中的整个提交链是逐位相同的。因此,比较每个存储库上运行的每个ref的简单
git的输出将做这个把戏


1如果这些在内部不匹配,您将看到(从中):

sha1不匹配
数据库中有一个对象的sha1与数据库不匹配
值。这表示存在严重的数据完整性问题。

2不同输入的任意两个SHA-1之间意外匹配的概率为2160分之一(2160比1048稍高,因此这是1.465分之一)。随着对象数量的增加,发生冲突的可能性会迅速增加,但出于实际目的,很少有人会完全忽略。真正发生冲突的唯一方法是故意这样做,也就是说。

您只需比较本地和远程分支/标记的哈希值。听起来是离开sourceforge的好时机;github,bitbucket等可能是更好的选择。如果SHA1哈希匹配,并且您的存储库通过了
git fsck
,事情应该会很好。
   sha1 mismatch <object>
       The database has an object who’s sha1 doesn’t match the database
       value. This indicates a serious data integrity problem.