0

我正在使用cvs2git(cvs2svn 的一部分)将 CVS 存储库迁移到 Git 中。当我运行该工具时,它似乎运行良好,最终我得到了一个工作的 git 存储库。但是,我需要一种方法来验证转换是否成功。

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

到目前为止,我唯一想到的就是对目录进行校验和,以验证文件是否相同,但每个文件夹中都有一个 .cvs 目录,所以我认为这行不通。

4

1 回答 1

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 somefile但是,如果您真的想这样做,我想您会为每个与之比较的文件编写一些东西cvs log somefile(自从我使用 CVS 以来已经很久了,我什至不记得这是否是一个有效的命令)。git log需要许多格式选项,您甚至可以让它以与 CVS 相同的格式吐出。

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

祝你好运!

于 2017-07-30T02:58:06.127 回答