git-cvsimport
命令名称 - 将您的数据从人们又爱又恨的另一个 SCM 中抢救出来
概要
[verse]
'git cvsimport' [-o <branch-for-HEAD>] [-h] [-v] [-d <CVSROOT>]
[-A <author-conv-file>] [-p <options-for-cvsps>] [-P <file>]
[-C <git-repository>] [-z <fuzz>] [-i] [-k] [-u] [-s <subst>]
[-a] [-m] [-M <regex>] [-S <regex>] [-L <commit-limit>]
[-r <remote>] [-R] [<CVS-module>]描述
警告: git cvsimport 使用 cvsps 版本 2,该版本已被视为弃用;它不适用于 cvsps 版本 3 及更高版本。如果您正在执行 CVS 仓库的一次性导入,请考虑使用 http://cvs2svn.tigris.org/cvs2git.html[cvs2git] 或 https://gitlab.com/esr/cvs-fast-export[cvs-fast-export]。
将 CVS 仓库导入 Git。它将创建一个新仓库,或增量导入到现有仓库中。
将 CVS 日志拆分为补丁集由 cvsps 完成。至少需要版本 2.1。
警告: 在某些情况下,导入会导致不正确的结果。请参阅 <<issues,问题>> 部分以获取进一步参考。
您永远不应在 git cvsimport 创建的分支上进行任何自己的工作。默认情况下,初始导入将从 CVS 仓库的主分支创建并填充一个"master"分支,您可以自由使用;之后,您需要自己 git merge 增量导入或任何 CVS 分支。建议通过 -r 指定命名的远程仓库,以分隔和保护传入的分支。
如果您打算设置一个所有开发者都可以读/写的共享公共仓库,或者如果您想使用 git-cvsserver(1),那么您可能想要对导入的仓库进行裸克隆,并将克隆用作共享仓库。参阅 gitcvs-migration(7)。
选项
-v- 详细:让cvsimport报告它正在做什么。-d <CVSROOT>- CVS 存档的根。可以是本地(简单路径)或远程;目前仅支持 :local:、:ext: 和 :pserver: 访问方法。如果未给定,git cvsimport将尝试从CVS/Root读取。如果不存在此类文件,则检查CVSROOT环境变量。<CVS-module>- 要导入的 CVS 模块。相对于 <CVSROOT>。如果未给定,git cvsimport尝试从CVS/Repository读取。-C <target-dir>- 要导入到的 Git 仓库。如果目录不存在,将被创建。默认为当前目录。-r <remote>- 将此 CVS 仓库导入到的 Git 远程仓库。将所有 CVS 分支移动到 remotes/<remote>/<branch>,类似于git clone默认使用 'origin' 的方式。-o <branch-for-HEAD>- 当未指定远程仓库(通过 -r)时,CVS 的HEAD分支被导入到 Git 仓库中的 'origin' 分支,因为HEAD对 Git 已有特殊含义。当指定远程仓库时,HEAD分支被命名为 remotes/<remote>/master,镜像git clone行为。如果要导入到不同的分支,请使用此选项。 使用 '-o master' 继续最初由旧的 cvs2git 工具完成的导入。-i- 仅导入:导入后不执行检出。此选项确保工作目录和索引保持不变,如果它们不存在则不会创建。-k- 杀死关键字:将以 '-kk' 从 CVS 存档中提取文件以避免嘈杂的变更集。强烈推荐,但默认关闭以保持与早期导入树的兼容性。-u- 将标签和分支名称中的下划线转换为点。-s <subst>- 将分支名称中的字符 "/" 替换为 <subst>。-p <options-for-cvsps>- cvsps 的附加选项。选项-u和 '-A' 是隐式的,不应在此处使用。 如果需要传递多个选项,请用逗号分隔。-z <fuzz>- 将时间戳模糊因子传递给 cvsps(以秒为单位)。如果未设置,cvsps 默认为 300 秒。-P <cvsps-output-file>- 不调用 cvsps,而是读取提供的 cvsps 输出文件。对于调试或在 cvsimport 外部处理 cvsps 时很有用。-m- 尝试基于提交消息检测合并。此选项将启用默认正则表达式,尝试从提交消息中捕获源分支名称。-M <regex>- 尝试使用自定义正则表达式基于提交消息检测合并。它可以与-m一起使用以同时启用默认正则表达式。您必须转义正斜杠。 正则表达式必须在 $1 中捕获源分支名称。 此选项可多次使用以提供多个检测正则表达式。-S <regex>- 跳过匹配正则表达式的路径。-a- 导入所有提交,包括最近的提交。cvsimport 默认跳过时间戳少于 10 分钟前的提交。-L <limit>- 限制导入的提交数量。针对 cvsimport 泄漏内存的情况的解决方法。-A <author-conv-file>- CVS 默认在写入提交日志时使用 Unix 用户名。使用此选项和作者转换文件可将 CVS 中记录的名称映射到作者姓名、电子邮件和可选时区:exon=Andreas Ericsson <ae@op5.se> spawn=Simon Pawn <spawn@frog-pond.org> America/Chicagogit cvsimport将使这些作者看起来好像他们的 GIT_AUTHOR_NAME 和 GIT_AUTHOR_EMAIL 一直设置正确。如果指定了时区,GIT_AUTHOR_DATE 将应用相应的偏移。为方便起见,每次提供 '-A' 选项时,此数据都会保存到
$GIT_DIR/cvs-authors,并且每次运行git cvsimport时都会从该文件读取。如果您打算稍后使用
git cvsexportcommit将更改导出回 CVS,则不建议使用此功能。-R- 生成包含 CVS 修订号到新创建的 Git 提交 ID 映射的$GIT_DIR/cvs-revisions文件。生成的文件将为每个导入的(文件名,修订)对包含一行;每行看起来像:src/widget.c 1.1 1d862f173cdc7325b6fa6d2ae1cfd61fd1b512b7如果文件已存在,修订数据将追加到文件中,用于增量导入时使用。
如果您的提交消息、错误跟踪系统、电子邮件存档等中存储了 CVS 修订号,此选项可能很有用。
-h- 打印简短用法消息并退出。
输出
如果指定了 -v,脚本将报告它正在做什么。
否则,以 Unix 方式表示成功,即以零退出状态退出。
问题
与时间戳相关的问题:
- 如果 CVS 仓库中提交的时间戳不够稳定,无法用于排序提交,更改可能会以错误的顺序显示。
- 如果任何文件曾多次被"cvs import"(例如导入多个供应商发布版本),HEAD 包含错误的内容。
- 如果不同文件的时间戳顺序在提交匹配时间窗口内交叉了修订顺序,提交的顺序可能是错误的。
与分支相关的问题:
- 未进行任何提交的分支不会被导入。
- 从分支点开始的所有文件都会被添加到分支中,即使在 CVS 中从未添加。
- 这适用于在子分支创建后添加到源分支的文件:如果先前未在子分支上进行过提交,它们将被错误地添加到 git 中的子分支。
与标签相关的问题:
- 同一修订上的多个标签不会被导入。
如果您怀疑这些问题中的任何一个可能适用于要导入的仓库,请考虑使用 cvs2git:
- cvs2git(cvs2svn 的一部分),
https://subversion.apache.org/
Git
git(1) 套件的一部分
