设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查与比较
补丁
调试
邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.43.2 → 2.49.0 无更改
-
2.43.1
2024-02-09
- 2.35.1 → 2.43.0 无更改
-
2.35.0
2022-01-24
- 2.11.4 → 2.34.8 无更改
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
- 2.3.10 → 2.8.6 无更改
-
2.2.3
2015-09-04
- 2.1.4 无更改
-
2.0.5
2014-12-17
概要
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 存储库的一次性导入,请考虑使用 cvs2git 或 cvs-fast-export。
将 CVS 存储库导入到 Git。它将创建一个新的存储库,或增量导入到现有的存储库中。
将 CVS 日志拆分为补丁集由 cvsps 完成。至少需要 2.1 版本。
警告:在某些情况下,导入会导致不正确的结果。请参阅 问题 部分以获取更多参考信息。
您绝不应该在由 git cvsimport 创建的分支上进行任何自己的工作。默认情况下,初始导入将从 CVS 存储库的主分支创建并填充一个“master”分支,您可以自由使用它;之后,您需要自己 git merge 增量导入或任何 CVS 分支。建议通过 -r 指定一个命名的远程,以分离和保护传入的分支。
如果您打算设置一个所有开发人员都可以读/写的共享公共存储库,或者您想使用 git-cvsserver[1],那么您可能需要制作一个导入存储库的 bare clone,并将该 clone 用作共享存储库。请参阅 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
-
消除关键字:将从 CVS 存档中提取带有 -kk 的文件,以避免嘈杂的变更集。强烈推荐,但默认关闭以保持与早期导入的树的兼容性。
- -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 用户名。使用此选项和一个 author-conv-file 可以将 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”ed 超过一次(例如,导入多个供应商版本),则 HEAD 包含错误的内容。
-
如果不同文件的时间戳顺序跨越提交匹配时间窗口内的修订顺序,则提交的顺序可能错误。
与分支相关的问题
-
未进行任何提交的分支不会被导入。
-
从分支点开始的所有文件都会添加到分支中,即使从未在 CVS 中添加过。
-
这适用于在创建子分支之后添加到源分支的文件:如果之前未在子分支上进行任何提交,它们将被错误地添加到 git 中的子分支中。
与标签相关的问题
-
同一修订上的多个标签不会被导入。
如果您怀疑这些问题中的任何一个可能适用于您要导入的存储库,请考虑使用 cvs2git
-
cvs2git(cvs2svn 的一部分),
https://subversion.org.cn/
GIT
属于 git[1] 套件的一部分