2017-07-29 53 views
0

我正在使用cvs2git(cvs2svn的一部分)将CVS存储库迁移到Git中。当我运行这个工具时,它看起来很完美,我最终得到了一个可用的git仓库。但是,我需要验证转换成功发生的方法。如何验证使用cvs2git的CVS到Git转换?

至少我需要确认最新的git提交中的文件内容与最新的CVS提交文件的内容相同。我也想验证,如果可能的话,提交作者匹配,提交的时间戳是正确的,该标签被保留(我知道标签/分支模型不完全匹配,但至少标签名称被保存为分支名称)以及任何其他重要的验证数据。我有大约30个库需要转换,所以我希望任何有些自动化的方法。

我到目前为止唯一想到的是做目录的校验和只是为了验证文件是相同的,但每个文件夹中都有一个.cvs目录,所以我不认为会工作。

回答

1

至少我需要确认最新的git提交中的文件内容与最新的CVS提交文件的内容相同。

您可以使用find列出所有的文件和排除.git.cvs。将结果传递给sha1sum之类的东西,以获取所有文件的校验和。捕获结果。

$ find cvs_checkout -name .cvs -prune -o -type f -print0 | xargs -0 sha1sum > cvs.sum 

$ find git_checkout -name .git -prune -o -type f -print0 | xargs -0 sha1sum > git.sum 

然后比较两个校验和文件。应该没有区别。

$ diff cvs.sum git.sum 

我也想,如果可以证实的是,提交的作者匹配,该提交的时间戳是正确的,即标签被保留...

鉴于Git和CVS的模型有多么不同,我不知道这会有多么有用。但是如果你真的想,我想你会为每个文件写一些比较git log somefilecvs log somefile(这已经很长时间,因为我已经使用CVS,我甚至不记得这是否是一个有效的命令)。 git log需要很多格式化选项,你甚至可以用CVS相同的格式将其吐出。

至于标签,你可以检查git tag -l对预期的标签列表。然后,您可以依次检查每个标签,并将其内容与上面的find/diff命令进行比较。

祝你好运!

+0

啊,太棒了,谢谢!你已经证实了我的怀疑,无论我采用什么方式,这将是一个乏味的过程。但是find命令为我节省了很多时间。 –

+0

考虑到cvs2git转换会对多个单文件cvs提交到单个git提交进行有根据的猜测,您会发现时间戳有所不同。如果你有很多标签(也许你的持续集成系统产生了常规标签,或者至少你有用于客户发布的标签),你可以比较CVS和git之间的标签。 – Mort