cvs2git 迁移不同于 git 和 cvs 的二进制文件(用 -kb 标记)

Posted

技术标签:

【中文标题】cvs2git 迁移不同于 git 和 cvs 的二进制文件(用 -kb 标记)【英文标题】:cvs2git migrates binary files (flagged with -kb) that are different from git and cvs 【发布时间】:2012-07-18 19:44:30 【问题描述】:

我在超过 2 GB 的 CVS 存储库上运行了 cvs2git 迁移。我写了一个脚本遍历新的 git 存储库和 CVS 模块来验证对象是否相同。我发现文本文件迁移得很好并且具有相同的 sha1sum;然而,所有的二进制文件都有不同的 sha1sum,它们在 CVS (-kb) 中都被标记为二进制。我读过的关于 cvs2git 和二进制文件的所有其他主题通常都将问题归咎于没有被标记为二进制文件 (-kb) 的二进制文件,但这里的情况并非如此。还有什么问题?

我执行迁移的脚本如下:

./Python-2.7.3/python ./cvs2svn-trunk/cvs2git \
--blobfile=/path/to/git-blob.dat \
--dumpfile=/path/to/git-dump.dat \
--username=cvs2git \
/cvsroot/database

cd /gitroot; mkdir database; cd database; git init

cat /path/to/git-blob,dump.dat | git fast-import

【问题讨论】:

它是真正的 CVS 存储库,还是 CVSNT? 【参考方案1】:

如果您的存储库是 CVSNT 存储库,而不是标准 CVS 存储库,则可以解释您的问题。无论文件是二进制文件,CVS对所有修订记录一次,而 CVSNT 记录文件类型逐个修订。 cvs2svn/cvs2git 只读取文件范围的二进制属性,而不是 CVSNT 的逐个修订属性。因此,它不知道一个文件在 CVSNT 中已被标记为二进制。

这是导致cvs2svn/cvs2git does not officially support converting from CVSNT repositories的主要原因。

【讨论】:

【参考方案2】:

这些二进制文件是否包含一些$Id ...$ 形式的字符串?这是我前段时间的问题(它在二进制文件中将其替换为$Id$),但它应该在最新版本中修复,请参阅this commit。

无论如何,我建议使用十六进制编辑器来找出实际的差异。

我还注意到您没有使用选项文件。我不确定 cvs2git 使用什么默认值,但值得尝试使用自定义版本的 cvs2git-example.options

【讨论】:

我看到了这个确切的问题。我正在使用最新版本的 cvs2git (2.4.0)。我将尝试使用选项文件方法,因为我使用的是命令行。 嗯 - 所以使用默认选项文件我遇到了同样的问题。如果我更改为始终将 KeywordHandlingPropertySetter 设置为不变,它就可以工作。我正在使用 CVSNT,所以我认为 @mhagger 的评论适用于我。

以上是关于cvs2git 迁移不同于 git 和 cvs 的二进制文件(用 -kb 标记)的主要内容,如果未能解决你的问题,请参考以下文章

如何将 cvs2git 迁移的结果导入 bitbucket

如何检查 cvs2git 是不是仍在运行?

CVS2GIT-转换:运行git fast-import时出错“mark ... not declared”

cvs2git checkout 使用选项文件中止(Windows)

cvs2svn cvs2git: 将 cvs 用户映射到 github 用户

你会从 cvs 迁移到 svn 还是直接迁移到 git 或 hg?