【发布时间】:2019-09-23 10:30:07
【问题描述】:
使用 cvs2git (Python 2.7.5) 从 CVS 迁移到 Gitlab 时显示以下提交消息。迁移时,我注意到 cvs2svn 创建了一些额外的提交,并带有相同的以下消息,这似乎是不必要的。
为什么它会在迁移期间创建不需要的提交?
This commit was manufactured by cvs2svn to create branch 'BRANCH_DEV_2014'.
【问题讨论】:
使用 cvs2git (Python 2.7.5) 从 CVS 迁移到 Gitlab 时显示以下提交消息。迁移时,我注意到 cvs2svn 创建了一些额外的提交,并带有相同的以下消息,这似乎是不必要的。
为什么它会在迁移期间创建不需要的提交?
This commit was manufactured by cvs2svn to create branch 'BRANCH_DEV_2014'.
【问题讨论】:
CVS 允许您标记/分支所有文件的某个子集。或标记/分支在不同时间存在的不同版本的文件。 (理论上,您可以创建一个仅标记一半文件的标签,其中 1/3 可能是 2003 年的版本,另外 2/3 可能是 2019 年的版本。)
这可能是有意的,也可能是无意的,因为 CVS 那样有点混乱。
另一方面,Git 强制要求所有标签/分支都是从一个时间点在存储库的特定一致状态上创建的。
在 cvs2git 进程中,当创建一个标签/分支时,如果该工具无法找到代表这个新标签/分支的整个 repo 的任何特定时间点和状态,cvs2git 将创建一个虚拟提交以允许它然后标签/分支。
例子:
如果您在 CVS 中有两个文件,a.class 和 a_test.class,并且您对这两个文件都有三个提交
然后你基于 Commit 2 创建了一个标签v.1.0.0,除了你只标记了 a.class,你没有标记 a_test.class。
当你把它转换成 git 时,git 没有办法处理它,所以它必须创建一个 dummy 提交。
o - Initial commit
|
o - Commit 2
|\
| o - Dummy commit, removes a_test.class so there's just a.class. Tagged v.1.0.0
|
o - Commit 3
【讨论】: