Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.43.2 → 2.47.0 no changes
- 2.43.1 02/09/24
- 2.35.1 → 2.43.0 no changes
- 2.35.0 01/24/22
- 2.11.4 → 2.34.8 no changes
- 2.10.5 09/22/17
- 2.9.5 07/30/17
- 2.3.10 → 2.8.6 no changes
- 2.2.3 09/04/15
- 2.1.4 no changes
- 2.0.5 12/17/14
概述
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 仓库,请考虑使用 cvs2git 或 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
-
Verbosity: 让 cvsimport 报告他正在做什么。
- -d <CVSROOT>
-
CVS 存档的根目录。可以是本地(简单路径)或远程;目前只支持 :local:、:ext: 和 :pserver: 访问方法。如果没有给出,git cvsimport 将尝试从 CVS/Root 中读取。如果没有此类文件,则会检查
CVSROOT
环境变量。 - <CVS_module>
-
要导入的 CVS 模块。相对于 <CVSROOT>。 如果没有给出,/git cvsimport' 会尝试从
CVS/Repository
中读取。 - -C <目标目录>
-
要导入的 Git 仓库。 如果目录不存在,则会创建。 默认为当前目录。
- -r <远程仓库>
-
要导入此 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 <正则表达式>
-
尝试使用自定义正则表达式根据提交信息检测合并。也可与
-m
搭配使用,启用默认的 regexes。必须转义为正斜杠。正则表达式必须在 $1 中捕获源分支名称。
该选项可多次使用,以提供多个检测 regexes。
- -S <正则表达式>
-
跳过与正则表达式匹配的路径。
- -a
-
cvsimport 默认跳过时间戳少于 10 分钟的提交。
- -L <限制>
-
限制导入的提交次数。针对 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 将使这些作者的 GIT_AUTHOR_NAME 和 GIT_AUTHOR_EMAIL 一直设置正确。 如果指定了时区,GIT_AUTHOR_DATE 将应用相应的偏移量。
为方便起见,每次提供 -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
-
打印简短的使用信息并退出。
问题
与时间戳有关的问题:
-
如果 CVS 存储库中提交的时间戳不够稳定,无法用于对提交进行排序,则更改可能会以错误的顺序显示。
-
如果任何文件曾被多次 "cvs import"(如导入多个供应商发布的版本),则 HEAD 包含错误的内容。
-
如果在提交匹配时间窗口内,不同文件的时间戳顺序与修订顺序不一致,提交顺序可能会出错。
与分支机构有关的问题:
-
未提交的分支不会被导入。
-
分支点的所有文件都会添加到分支中,即使从未在 CVS 中添加过。
-
这适用于在创建子分支*之后*添加到源分支的文件:如果之前没有在子分支上提交,这些文件就会在 git 中被错误地添加到子分支上。
与标签有关的问题:
-
不会导入同一修订版上的多个标记。
如果您怀疑要导入的仓库可能存在上述问题,请考虑使用 cvs2git:
-
cvs2git(cvs2svn 的一部分),
http://subversion.apache.org/
GIT
属于 git[1] 文档