【问题标题】:How to verify a CVS to Git conversion that used cvs2git?如何验证使用 cvs2git 的 CVS 到 Git 的转换?
【发布时间】:2023-03-12 21:03:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: git cvs cvs2git


    【解决方案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 命令进行比较。

    祝你好运!

    【讨论】:

    • 啊,太棒了,谢谢!你已经证实了我的怀疑,无论我怎么做,这都是一个乏味的过程。但是 find 命令确实为我节省了很多时间。
    • 鉴于 cvs2git 转换将对多个单文件 cvs 提交组合成一个 git 提交进行有根据的猜测,您会发现时间戳不同。如果你有很多标签(也许你的持续集成系统产生了常规标签,或者至少你有客户发布的标签),你可以比较 CVS 和 git 之间的标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多