我有两个不同的CVS存储库导出到Git。它们在某些点上分歧,我正在调查原因。开发线路历经数年和成千上万次提交。
在开发线路的开头,每个提交的SHA1 ID都是相同的,这告诉我git-cvsimport在读取cvsps结果并导入时非常一致。
但是在第一个提交和昨天之间的某个时间点,SHA1 ID开始分歧。我想通过比较每个存储库的提交ID列表,并查看缺少了什么来找出问题所在。是否有任何好的工具或技术可以做到这一点?
我有两个不同的CVS存储库导出到Git。它们在某些点上分歧,我正在调查原因。开发线路历经数年和成千上万次提交。
在开发线路的开头,每个提交的SHA1 ID都是相同的,这告诉我git-cvsimport在读取cvsps结果并导入时非常一致。
但是在第一个提交和昨天之间的某个时间点,SHA1 ID开始分歧。我想通过比较每个存储库的提交ID列表,并查看缺少了什么来找出问题所在。是否有任何好的工具或技术可以做到这一点?
由于这两个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?
为什么不将每个仓库的git日志输出到它自己的文件中并进行比较呢?最接近文件底部的差异是它们开始分歧的地方...
$ 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
这提供了两个仓库之间的对称差异;它展示了一个仓库中的所有提交,但不包括另一个仓库。
git status
以获取更改文件列表。git diff <filename>
也可以用于进一步检查。我能够比较文件。你可以将这两个仓库放到一个单独的仓库中,可以是新的仓库,也可以是现有的仓库,就像 ephemient、Charles Bailey 和 Brian Campbell 的回答一样。或者你可以使用 Git Wiki 上 Tips and Tricks 页面上的技巧,更确切地说是那里的 "如何比较两个本地仓库" 问题。
但是,使用 "git rev-list"(或带有适当选项的 "git-log")生成按拓扑顺序排序的提交 SHA-1 列表可能更简单,并检查它们第一个不同的修订版本。
git remote fetch cvsimport-a; git remote fetch cvsimport-b
(不更新其他远程仓库),但后来我改变了主意...完成。如果省略/master
,Git 会有一点抱怨,但它可以工作。为了清晰起见,我会更改它。 - ephemient