cvs2git:保持从CVS版本号到Git版本哈希的映射的可能性

问题描述 投票:3回答:3

我们使用cvs2git将大型CVS存储库迁移到GIT。对于内部工具,我们需要某些文件从CVS版本号到GIT版本哈希的映射。

[cvs2svn具有参数--cvs-revnums,但是此修订版仅存储在svn文件属性中,不适用于git。

[我看到git cvsimport -R创建了此映射,但是对cvs2git有许多其他缺点。

是否还有其他可能从--cvs-revnums获取信息?

git cvs cvs2git
3个回答
2
投票

如果我理解正确,您想要一种方法来回答问题“什么是第一个包含文件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提交祖先图来告诉您该信息。因此,要做很多工作才能使它成为一个完整,方便的功能。希望有所帮助。

1
投票
谢谢您的回答!

现在我已成功完成从CVS到GIT的迁移。

因为我们仅需要在每个存储库中的几个文件中使用Git Hash和CVS修订版之间的映射,我以一种对我来说更容易的方式解决了所描述的问题:

    使用cvs2svn将CVS信息库从CVS迁移到GIT。
  1. 对于文件A:从CVS服务器的所有分支接收所有CVS提交,按时间顺序排列在单个列表中。
  2. 从GIT接收文件A的所有分支的所有提交,在单个列表中按时间顺序排序(忽略注释为“此提交是cvs2svn制造的”的提交)。
  3. 确保两个列表中的GIT提交的CVS数量完全相同(以确保没有人对CVS进行新的提交。
  4. 将每个CVS修订版映射到单个GIT哈希。
  • 现在,对于每个CVS版本,我们都有第一个包含CVS文件版本的Git提交。这对我们有用,因为对于一个文件,在不同分支中没有具有相同时间戳的CVS提交。

  • 0
    投票
    是否可能知道您在迁移到Git之后如何继续修改cvs文件?因为将cvs迁移到Git已经在家里完成了,但是我丢失了文件的修订版和时间戳。这就是我做到的1. cvs2svn生成dump.dat和blob.dat2. git快速导入和git checkout谢谢
    © www.soinside.com 2019 - 2024. All rights reserved.