我们使用cvs2git
将大型CVS存储库迁移到GIT。对于内部工具,我们需要某些文件从CVS版本号到GIT版本哈希的映射。
[cvs2svn
具有参数--cvs-revnums
,但是此修订版仅存储在svn文件属性中,不适用于git。
[我看到git cvsimport -R
创建了此映射,但是对cvs2git有许多其他缺点。
是否还有其他可能从--cvs-revnums
获取信息?
如果我理解正确,您想要一种方法来回答问题“什么是第一个包含文件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提交哈希。实际上,这并不简单,因为cvs2git不会自行创建Git哈希,而只是将它们以抽象形式写入“ git fast-import”,从而创建提交并计算其哈希。
Tellya我要做什么...
我刚刚对cvs2svn的主干版本进行了更改,这使OutputPass发出了更多的信息,即哪个“标记”对应于哪个伪Subversion版本号。以上提交的输出如下所示:
Writing commit r23 on Branch('B_MIXED') (mark :1000000021)
反过来,可以通过要求“ git fast-import”将其标记写入文件,将标记“:1000000021”转换为Git SHA-1:
cat ../git-blob.dat ../git-dump.dat | git fast-import --export-marks=FILENAME
在结果文件中查找如下所示的行:
:1000000021 0aa255270fbb94ad691d5391a6d37c2ee6d78b03
您可以从中读取Git哈希。
您仍然需要做一些工作来将所有这些信息汇总在一起,但是现在至少应该[[原则上。
[请注意,此方法只会告诉您第一个包含CVS文件修订版的Git提交。它会not
告诉您该文件修订何时合并到其他分支。实际上,由于CVS和Git之间的阻抗不匹配,您不能依靠Git提交祖先图来告诉您该信息。因此,要做很多工作才能使它成为一个完整,方便的功能。希望有所帮助。现在我已成功完成从CVS到GIT的迁移。
因为我们仅需要在每个存储库中的几个文件中使用Git Hash和CVS修订版之间的映射,我以一种对我来说更容易的方式解决了所描述的问题: