如何比较两个git仓库?

37

我有两个不同的CVS存储库导出到Git。它们在某些点上分歧,我正在调查原因。开发线路历经数年和成千上万次提交。

在开发线路的开头,每个提交的SHA1 ID都是相同的,这告诉我git-cvsimport在读取cvsps结果并导入时非常一致。

但是在第一个提交和昨天之间的某个时间点,SHA1 ID开始分歧。我想通过比较每个存储库的提交ID列表,并查看缺少了什么来找出问题所在。是否有任何好的工具或技术可以做到这一点?

6个回答

41

由于这两个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?

你可能需要在那些命令中使用cvsimport-a/master和cvsimport-b/master。另外,你可以执行“git remote update”而不是通过管道传递给xargs git fetch。 - Brian Campbell
我原本打算写 git remote fetch cvsimport-a; git remote fetch cvsimport-b(不更新其他远程仓库),但后来我改变了主意...完成。如果省略 /master,Git 会有一点抱怨,但它可以工作。为了清晰起见,我会更改它。 - ephemient

17

为什么不将每个仓库的git日志输出到它自己的文件中并进行比较呢?最接近文件底部的差异是它们开始分歧的地方...


这实际上是我昨天做的,尽管今天我会根据其他答案的建议更进一步。 - skiphoppy
4
找出两个代码库开始分歧的地方,与告诉我自从那个分歧以来所创造的差异还有很长的路要走。 - masukomi
抱歉,但这不是问题的内容。问题是如何比较两个代码库。答案如下。 - awm

15
在您的其中一个代码库中,执行以下操作:
$ 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

这提供了两个仓库之间的对称差异;它展示了一个仓库中的所有提交,但不包括另一个仓库。


4
明显的方法是克隆一个仓库,将另一个仓库主分支的最新版本提取到克隆中,并使用git merge-base命令在这两个版本之间找到共同的祖先。

6
如何获取另一个仓库主分支的最新代码?有人向我求助。:/ - Darpan
2
对于那些以“显而易见的方式”开始回答,然后假设该方式足够明显,不需要实际写出答案的人进行贬低投票! - Lou

1
我最近也有类似的需求。我需要将一个克隆的远程项目与当前复制的代码库进行比较。Git日志不相关,因为提交没有共同之处,而且我不确定它们是否从相同的代码库分支出来。
为了解决这个问题,我采用了一种蛮力的方式使用Git。我将要检查的文件复制到Git存储库中,然后检查git status以获取更改文件列表。
此外,git diff <filename>也可以用于进一步检查。我能够比较文件。

1

你可以将这两个仓库放到一个单独的仓库中,可以是新的仓库,也可以是现有的仓库,就像 ephemientCharles BaileyBrian Campbell 的回答一样。或者你可以使用 Git Wiki 上 Tips and Tricks 页面上的技巧,更确切地说是那里的 "如何比较两个本地仓库" 问题。

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


技巧链接显示“未找到”,它是否已经移动或者消失了? - Chris
1
Git Wiki最初从http://git.or.cz迁移到http://git.wiki.kernel.org,但在kernel.org遭受入侵后,它尚未恢复(也不知道是否会恢复,或者可能在http://git-scm.com的某个地方)。http://git.wiki.kernel.org处于只读模式,因此所有链接都已更改。**技巧和窍门**(又名**GitTips**)在此处提供:https://git.wiki.kernel.org/articles/g/i/t/GitTips_81aa.html - Jakub Narębski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接