0

使用 cvs2git (Python 2.7.5) 从 CVS 迁移到 Gitlab 时显示以下提交消息。在迁移时,我注意到 cvs2svn 正在创建一些额外的提交,并带有相同的以下消息,这似乎是不必要的。

为什么它会在迁移期间创建不需要的提交?

  This commit was manufactured by cvs2svn to create branch 'BRANCH_DEV_2014'.
4

1 回答 1

2

CVS 允许您标记/分支所有文件的某些子集。或标记/分支在不同时间存在的不同版本的文件。(理论上,您可以创建一个仅标记一半文件的标签,其中 1/3 可能是 2003 年的版本,另外 2/3 可能是 2019 年的版本。)

这可能是有意的,也可能是无意的,因为 CVS 那样有点混乱。

另一方面,Git 强制要求所有标签/分支都是从单个时间点在存储库的特定一致状态上创建的。

在 cvs2git 进程中,当创建一个标签/分支时,如果该工具无法找到代表这个新标签/分支的整个 repo 的任何特定时间点和状态,cvs2git 将创建一个虚拟提交以允许它随后标记/分支.


例子:

如果您在 CVS 中有两个文件 a.class 和 a_test.class 并且您对这两个文件都有三个提交

  1. a.class a_test.class --- 初始版本
  2. a.class a_test.class --- 提交 2
  3. a.class a_test.class --- 提交 3

然后你v.1.0.0基于 Commit 2 创建了一个标签,除了你只标记了 a.class,你没有标记 a_test.class。

当您将其转换为 git 时,git 无法处理此问题,因此它必须创建一个虚拟提交。

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
于 2019-09-29T21:37:59.057 回答