我们使用cvs2git将大型CVS存储库迁移到GIT。对于一个内部工具,我们需要一个从CVS修订号到某些文件的GIT修订号散列的映射。
cvs2svn有一个参数--cvs-revnums,但这个修订只存储在svn文件属性中,不适用于git。
我看到git cvsimport -R创建了这个映射,但与cvs2git相比还有许多其他缺点。
还有没有其他从--cvs-revnums获取信息的可能性?
发布于 2013-06-18 17:35:39
如果我理解正确的话,您想要一个方法来回答这个问题:“第一个包含文件FOO的CVS修订版X.Y的Git提交是什么?”
如果您打开了cvs2git详细输出("-v"),那么cvs2git在CreateRevsPass期间会显示添加到每个Git中的CVS文件修订:
CVS Revision grouping:
Time: Fri May 23 02:31:36 2003
Creating Subversion r23 (commit)
proj/default 1.2.2.1
proj/sub1/default 1.2.2.1
proj/sub2/subsubA/default 1.1.2.1这很接近你想要的。但是这些信息不足以生成表,因为没有简单的方法将伪Subversion修订号(如"r23")映射到Git commit散列。事实上,这并不是微不足道的,因为cvs2git不会自己创建Git散列,而只是以抽象的形式将它们写入"git快速导入“,后者创建提交并计算它们的散列。
告诉你我要做的事..。
我刚刚更改了cvs2svn的主干版本,这会使OutputPass发出更多的信息,即哪个“标记”对应于哪个伪Subversion修订号。上述提交的输出如下所示:
Writing commit r23 on Branch('B_MIXED') (mark :1000000021)反过来,标记":1000000021“可以通过请求"git fast-import”将其标记写入文件来转换为Git SHA-1:
cat ../git-blob.dat ../git-dump.dat | git fast-import --export-marks=FILENAME在结果文件中查找如下所示的行:
:1000000021 0aa255270fbb94ad691d5391a6d37c2ee6d78b03你可以从中读出Git散列。
要将所有这些信息整合在一起,您仍有一些工作要做,但现在至少在原则上应该是可能的。
请注意,此方法只会告诉您包含CVS文件修订的第一个Git提交。它不会告诉您该文件修订何时合并到其他分支。事实上,由于CVS和Git之间的阻抗不匹配,您不能依赖Git提交祖先图来告诉您该信息。因此,要使其成为一个完整的、方便的功能,还有很多工作要做。
希望这能有所帮助。
发布于 2014-04-14 19:46:48
谢谢你的回答!
现在,我成功地完成了从CVS到GIT的迁移。
因为我们只需要每个存储库中的几个文件的Git Hash和CVS修订版之间的映射,所以我以一种对我来说更简单的方式解决了所描述的问题:
<代码>H19将每个CVS修订版本映射到单个GIT哈希。<代码>H210<代码>G211
现在,对于每个CVS版本,我们都有包含CVS文件版本的第一个Git提交。这对我们来说很有效,因为对于一个文件,我们没有在不同分支中使用相同时间戳的CVS提交。
https://stackoverflow.com/questions/17108030
复制相似问题