Git

名称

git-cvsimport - 从另一个让人由爱生恨的 SCM 中获取数据

概述

git cvsimport [-o <HEAD 分支>] [-h] [-v] [-d <CVSROOT>]
	      [-A <author-conv-file>] [-p <options-for-cvsps>] [-P <文件>]
	      [-C <Git 仓库>] [-z <fuzz>] [-i] [-k] [-u] [-s <subst>]
	      [-a] [-m] [-M <正则表达式>] [-S <正则表达式>] [-L <提交范围>]
	      [-r <远程仓库>] [-R] [<CVS 模块>]

描述

警告: git cvsimport 使用 cvsps 第 2 版,该版本已被视为弃用; 它不能用于 cvsps 第 3 版及更高版本。 如果要一次性导入 CVS 仓库, 请考虑使用 cvs2gitcvs-fast-export

将 CVS 仓库导入 Git。它既可以创建一个新的仓库,也可以增量导入现有仓库。

将 CVS 日志分割成补丁集由 cvsps 完成。 至少需要 2.1 版本。

警告: 在某些情况下,导入会导致不正确的结果。 请参阅 ISSUES 部分以获取更多参考。

您*绝对不*应该在 git cvsimport 创建的分支上做任何自己的工作。 默认情况下,初始导入会从 CVS 仓库的主分支创建并填充一个 "master" 分支,您可以自由使用该分支;之后,您需要自己 git merge 增量导入或任何 CVS 分支。 建议通过 -r 指定一个命名的远程分支,以分隔和保护导入的分支。

如果你打算建立一个所有开发者都能读写的共享公共仓库,或者如果你想使用 git-cvsserver[1],那么你可能想做一个导入仓库的裸克隆,并将该克隆作为共享仓库。 参见 gitcvs-migration[7]

选项

-v

Verbosity: 让 cvsimport 报告他正在做什么。

-d <CVSROOT>

CVS 存档的根目录。可以是本地(简单路径)或远程;目前只支持 :local:、:ext: 和 :pserver: 访问方法。如果没有给出,git cvsimport 将尝试从 CVS/Root 中读取。如果没有此类文件,则会检查 CVSROOT 环境变量。

<CVS-module>

要导入的 CVS 模块。相对于 <CVSROOT>。 如果没有给出,/git cvsimport' 会尝试从 CVS/Repository 中读取。

-C <target-dir>

The Git repository to import to. If the directory doesn’t exist, it will be created. Default is the current directory.

-r <remote>

要导入此 CVS 仓库的 Git 远程仓库。 将所有 CVS 分支移至 remotes/<远程仓库>/<分支>,类似于 git clone 默认使用 origin 的方式。

-o <branch-for-HEAD>

如果没有指定远程分支(通过 -r),CVS 中的 HEAD 分支会被导入 Git 仓库中的 origin 分支,因为 HEAD 对 Git 已经有了特殊含义。 如果指定了一个远程分支,HEAD 分支就会被命名为 remotes/<远程仓库>/master,以反映 git clone 行为。 如果要导入不同的分支,请使用此选项。

使用 -o master 继续导入最初由旧版 cvs2git 工具完成的导入。

-i

仅导入:导入后不执行检出。 该选项可确保工作目录和索引保持不变,如果不存在也不会创建。

-k

杀死关键字:将从 CVS 存档中提取带有 -kk 的文件,以避免出现嘈杂的更改集。强烈建议使用,但默认为关闭,以保持与早期导入树的兼容性。

-u

将标记和分支名称中的下划线转换为点。

-s <subst>

用 <subst> 代替分支名称中的字符"/"

-p <options-for-cvsps>

cvsps 的附加选项。 选项 -u-A 是隐含的,不应在此使用。

如果需要传递多个选项,请用逗号分隔。

-z <fuzz>

向 cvsps 传递时间戳模糊因子,单位为秒。如果未设置,cvsps 默认为 300 秒。

-P <cvsps 输出文件>

不调用 cvsps,而是读取提供的 cvsps 输出文件。在调试或在 cvsimport 之外处理 cvsps 时非常有用。

-m

尝试根据提交信息检测合并。该选项将启用默认的 regexes,尝试从提交信息中捕捉源分支名称。

-M <regex>

尝试使用自定义正则表达式根据提交信息检测合并。也可与 -m 搭配使用,启用默认的 regexes。必须转义为正斜杠。

正则表达式必须在 $1 中捕获源分支名称。

该选项可多次使用,以提供多个检测 regexes。

-S <正则表达式>

跳过与正则表达式匹配的路径。

-a

cvsimport 默认跳过时间戳少于 10 分钟的提交。

-L <limit>

限制导入的提交次数。针对 cvsimport 泄露内存情况的解决方法。

-A <作者的 conv 文件>

CVS 在编写提交日志时默认使用 Unix 用户名。使用此选项和 author-conv 文件可将 CVS 中记录的姓名映射为作者姓名、电子邮件和可选的时区:

	exon=Andreas Ericsson <ae@op5.se>
	spawn=Simon Pawn <spawn@frog-pond.org> America/Chicago

git cvsimport will make it appear as those authors had their GIT_AUTHOR_NAME and GIT_AUTHOR_EMAIL set properly all along. If a time zone is specified, GIT_AUTHOR_DATE will have the corresponding offset applied.

为方便起见,每次提供 -A 选项时,这些数据都会被保存到 $GIT_DIR/cvs-authors 中,每次运行 git cvsimport 时,都会从同一文件中读取这些数据。

如果您打算稍后再用 git cvsexportcommit 将更改导出回 CVS,则不建议使用此功能。

-R

生成一个 $GIT_DIR/cvs-revisions 文件,其中包含从 CVS 版本号到新创建的 Git 提交 ID 的映射。 生成的文件将为导入的每一对(文件名、修订版)包含一行;每行看起来像

src/widget.c 1.1 1d862f173cdc7325b6fa6d2ae1cfd61fd1b512b7

如果已存在修订数据,则会将其附加到文件中,以便在进行增量导入时使用。

如果在提交信息、错误跟踪系统、电子邮件归档等中存储了 CVS 版本号,该选项可能会很有用。

-h

打印简短的使用信息并退出。

输出

如果指定了 -v,脚本会报告它正在做什么。

否则,将以 Unix 的方式表示成功,即直接以零退出状态退出。

问题

与时间戳有关的问题:

  • 如果 CVS 存储库中提交的时间戳不够稳定,无法用于对提交进行排序,则更改可能会以错误的顺序显示。

  • 如果任何文件曾被多次 "cvs import"(如导入多个供应商发布的版本),则 HEAD 包含错误的内容。

  • 如果在提交匹配时间窗口内,不同文件的时间戳顺序与修订顺序不一致,提交顺序可能会出错。

与分支机构有关的问题:

  • 未提交的分支不会被导入。

  • 分支点的所有文件都会添加到分支中,即使从未在 CVS 中添加过。

  • 这适用于在创建子分支*之后*添加到源分支的文件:如果之前没有在子分支上提交,这些文件就会在 git 中被错误地添加到子分支上。

与标签有关的问题:

  • 不会导入同一修订版上的多个标记。

如果您怀疑要导入的仓库可能存在上述问题,请考虑使用 cvs2git:

  • cvs2git(cvs2svn 的一部分),http://subversion.apache.org/

GIT

属于 git[1] 文档

scroll-to-top