我如何比较两个git存储库?

时间:2009-03-26 20:27:59

标签: git version-control

我有两个不同的CVS存储库导出到git中。他们在某些方面有所不同,我正在调查原因。该开发线可以追溯到几年,并且有数万次提交。

在开发行的开头,每个提交的SHA1 ID都是相同的,告诉我git-cvsimport在读取cvsps和import的结果时非常一致。

但是在第一次提交和昨天之间的某个时间,SHA1 ID开始出现分歧。我想通过比较每个存储库中的提交ID列表并查看缺少的内容来找出它的位置。有没有什么好的工具或技术可以做到这一点?

6 个答案:

答案 0 :(得分:34)

由于两个git存储库的开头相同,因此可以将两者都放到同一个工作存储库中。

$ git remote add cvsimport-a git://.../cvsimport-a.git
$ git remote add cvsimport-b git://.../cvsimport-b.git
$ git remote update
$ git log cvsimport-a/master..cvsimport-b/master  # in B, not in A?
$ git log cvsimport-b/master..cvsimport-a/master  # in A, not in B?

答案 1 :(得分:18)

为什么不将每个repo的git log记录到自己的文件中并进行比较?最接近文件底部的差异是它们开始发散的地方......

答案 2 :(得分:12)

在您的其中一个回购中,请执行以下操作:

$ git remote add other-repo git://.../other-repo.git
$ git remote update
$ git log other-repo/master...master
  # or maybe:
$ gitk master... other-repo/master

这给你两个回购之间的对称差异;这将显示一个仓库中的所有提交,而不是另一个仓库。

答案 3 :(得分:6)

显而易见的方法是克隆一个存储库,将另一个存储库的主分支的尖端读取到克隆中,并在两个提示上使用git merge-base来查找共同的祖先。

答案 4 :(得分:0)

您可以将(获取)两个存储库放入单个存储库(新存储库或现有存储库存储库)中,如 ephemient Charles Bailey 的响应布莱恩坎贝尔。或者你可以在Git Wiki上的Tips and Tricks页面使用技巧,或者更确切地说“如何比较两个本地存储库”的问题。

但是使用“git rev-list”(或带有适当选项的“git-log”)以拓扑顺序生成提交的SHA-1列表可能更简单,并检查它们不同的第一个修订版。

答案 5 :(得分:0)

我最近有类似的需求。我有一个克隆的远程项目,我需要与当前复制的代码库进行比较。 git日志不相关,因为提交没有任何共同之处,我不确定它们是否从相同的代码库中分支出来。

为了解决这个问题,我以蛮力的方式使用git。我将要检查的文件复制到git仓库中,然后检查git status以查找列表更改的文件。

此外,git diff <filename>也可用于进一步检查。我能够比较

中的文件