简体中文 ▾ 主题 ▾ 最新版本 ▾ git-cvsimport 最后更新于 2.43.1

名称

git-cvsimport - 从人们讨厌的另一个 SCM 中挽救你的数据

概要

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 仓库的一次性导入,请考虑使用 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

详细程度:让 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 默认为 300s。

-P <cvsps-output-file>

不调用 cvsps,而是读取提供的 cvsps 输出文件。这对于调试或当 cvsps 在 cvsimport 外部处理时很有用。

-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

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

输出

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

否则,成功通过 Unix 方式表示,即简单地以零退出状态退出。

问题

与时间戳相关的问题

  • 如果 CVS 仓库中提交的时间戳不够稳定以用于排序提交,更改可能会以错误的顺序显示。

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

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

与分支相关的问题

  • 未进行任何提交的分支不会被导入。

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

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

与标签相关的问题

  • 同一修订上的多个标签不会被导入。

如果你怀疑这些问题中的任何一个可能适用于你想要导入的仓库,请考虑使用 cvs2git。

  • cvs2git (cvs2svn 的一部分), https://subversion.org.cn/

GIT

Git[1] 套件的一部分

scroll-to-top