这是 cvs-fast-export 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
cvs-fast-export - 从 CVS 存储库或 RCS 集合中快速导出历史记录。
概要
cvs-快速导出 [-h] [-C] [-F] [-a] [-w 模糊] [-g] [-l] [-v] [-q] [-V] [-T] [-p] [-P] [-i
日期] [-k 扩张] [-一种 作者地图] [-t 线程] [-R 修订图] [--reposurgeon] [-e 远程]
[-S. 剥离前缀]
商品描述
cvs-fast-export 尝试将 RCS 文件集合中的每个文件提交和标签分组,或者
CVS 项目存储库到每个项目的变更集提交中,并带有通用元数据,在
Subversion 和后来的版本控制系统的风格。
此工具最好与 再生外科医生(1). 普通 cvs-fast-export
转换包含各种化石,reposurgeon 有利于清理。 看
DVCS 迁移 HOWTO 以了解所需的健全性检查和完善步骤
用于真正高质量的转换,包括参考提升和各种
工件清理。
如果提供了参数,程序假定所有以扩展名“,v”结尾的都是
主文件并将它们读入。如果没有提供参数,程序将读取文件名
来自标准输入,每行一个。 不以“,v”结尾的目录和文件将被跳过。 (但见
有关如何更改此行为的 -P 的描述。)
处理来自 Unix CVS 或 CVS-NT 的文件。 如果文件集合具有 commitid
字段,将使用这些可靠地构造变更集。
在默认模式下,它会生成一个 git 风格的快速导出流到标准输出:
· 使用 -s 选项给出的前缀,或者,如果省略该选项,则是最长的公共
从每个路径中丢弃路径的前缀。
· CVS Attic 和 RCS 目录中的文件被视为“Attic/”或“RCS/”
部分路径不存在。 这通常会恢复文件的历史记录
删除。
· 与特定文件相关的所有文件操作的权限将由
对相应的 master 的权限。 如果主机上的可执行位打开,
它的所有文件操作都将拥有 100755 权限; 否则为 100644。
· 一组文件操作合并为一个变更集,如果 (a) 它们都共享
相同的 commitid,或 (b) 都没有 commitid 但相同的更改评论、作者、
和时间模糊参数定义的窗口内的修改日期。 不像
其他一些导出器,没有尝试从共享标签派生变更集。
· 提交按时间顺序发出,除非 cvs-fast-export 检测到某些父
比它的孩子年轻(这不太可能,但在严重时钟的情况下是可能的
歪斜)。 在这种情况下,您将看到有关标准错误的警告,并且排放顺序为
保证拓扑正确,但未指定(并受制于
在此程序的未来版本中更改)。
· 当 CVS 标签可以明确地与一个
变更集。 如果相同的标签附加到解析为多个的文件增量
变更集,它被报告为好像附加到它们中的最后一个。
· HEAD 分支重命名为 主.
· 其他标签和分支名称被清理为 git 合法; 字符 ~^\*? 是
除去。
· 由于 .cvsignore 文件的语法与 .gitignore 文件的语法向上兼容,
他们改名了。 为了模拟 CVS 的默认忽略行为,那些
默认值被添加到 root .cvsignore blob 重命名为 .gitignore,和一个 root
如果不存在此类 blob,则会生成包含默认值的 .gitignore。
有关边缘情况的更多信息,请参阅后面关于 RCS/CVS 限制的部分
转换问题。
该程序不依赖于个人以外的任何 CVS 元数据
内容文件(例如在 CVSROOT 下)。
变量 TMPDIR 在生成临时目录时受到尊重和使用
在处理过程中存储文件内容。
配置
-h
显示使用情况摘要。
-w 模糊
设置时间戳模糊因子,以秒为单位识别补丁集。 默认是
300 秒。 此选项与带有 commitids 的变更集无关。
-k
指定 RCS/CVS 关键字扩展。 您可以指定任何 CVS 关键字扩展
类型:“kv”(关键字值)、“kvl”(关键字值锁定器)、“k”(仅关键字)、“v”
(仅限值)、“o”(无扩展)或“b”(二进制 - 无扩展,无行尾
转换)。 CVS 的规则是: (1) 如果 master 在其内部关键字中设置了 -kb
字段,执行此操作,否则 (2) 如果在命令行上设置了扩展类型,执行
那,否则 (3) 如果设置了文件的内部关键字字段,则执行该操作,否则
使用 kv。 cvs-fast-export 的行为略有不同; 默认是 kb 而不是
kkv, kvl 被当作 kv 对待,ko 被当作 kb 对待(即没有行尾
曾经执行过归一化)。
-g
用graphviz使用的DOT标记语言生成提交图的图片
工具,而不是快速导出。
-l
警告通常转到标准错误。 此选项采用文件名,允许
您可以将它们重定向到一个文件> 使用 -p 选项很方便。
-a
转储在存储库中找到的作者 ID 列表,而不是快速导出。
-C
在发出的流中强制规范顺序(与 git-fast-export 相同)。 斑点是
在需要它们的提交之前尽可能晚地发出。 它减少了
吞吐量大约是原来的两倍。 提交时间顺序的存储库
与它们的拓扑顺序不一致会产生格式错误的快速导出
-C 模式下的流; 这些会使 Git 的导入器崩溃。
-F
强制快速订购。 Blob 首先发出,然后提交。
-A 作者地图
将作者地图文件应用于属性行。 每行必须是以下形式
ferd = Ferd J. Foonly[电子邮件保护]> 美国/芝加哥
并将应用于映射 Unix 用户名 费德 到 DVCS 风格的用户身份
在等号后指定。 时区字段(在 > 和空格之后)是
可选和(如果存在)用于设置要附加到
日期; 时区字段的可接受格式是可以在 TZ 中的任何格式
环境变量,包括 [+-]hhmm 偏移量。 等号周围的空格
被剥离。 以 # 开头或不包含等号的行是静默的
忽略了。
-R 修订图
将修订映射写入指定的参数文件名。 修订图的每一行
由三个空格分隔的字段组成:文件名、RCS 修订号和
该文件名修订对被分配到的提交的标记。 不起作用
用-g。
-v
显示主要是开发人员感兴趣的详细进度消息。
-q
安静地运行,抑制关于没有 commitids 和其他次要的警告消息
程序通常可以补偿但可能表明的问题
转换问题。 打算与 cvsconvert 一起使用,它有自己的正确性
检查。
-T
强制回归测试的确定性日期。 每个补丁集将有一个
从输出流中的标记计算出的单调递增属性日期 -
标记值乘以提交时间窗口乘以 XNUMX。
——再手术医生
为每个提交发出一个 CVS 文件列表:将其组成为 bzr 样式的修订对
提交名为“cvs-revisions”的属性。 从 2.12 版本开始, 再生外科医生(1) 可以
解释这些并将它们用作参考提升的提示。
--嵌入ID
附加到每个提交评论标识的 CVS 提交做出贡献
它。
-V
发出程序版本并退出。
-e 远程
导出的分支名称以 refs/remotes/ 为前缀远程 而不是裁判/负责人,
使导入看起来来自命名的遥控器。
-s 剥离前缀
去除给定的前缀而不是最长的公共前缀
-t 线程数
运行多线程会按比例增加程序的内存占用
线程数,但这意味着转换可能会在更少的总时间内运行,因为 I/O
涉及一个主文件的操作不会阻止对
其他。 默认情况下,程序保守地假设它每个可以使用两个线程
处理器可用。 您可以使用此选项来设置线程数; 值 0
强制顺序处理而没有线程。
-p
启用进度报告。 这也会转储统计信息(经过的时间和大小
最大常驻集)用于转换运行中的几个点。
-P
通常 cvs-fast-export 会跳过作为参数或标准输入出现的任何文件名
不以 RCS/CVS 扩展名“,v”结尾,也会忽略路径名
包含字符串 CVSROOT(这可以避免在从或高于
顶级 CVS 目录)。 严格阅读 RCS 允许 master 没有 ,v
延期。 此选项设置混杂模式,禁用两项检查。
-i 日期
启用增量转储模式。 仅在指定的日期之后提交
参数发出。 增量转储中的每个分支根都装饰有
git-stream 魔术,当在实时存储库的上下文中解释时,将连接
该分支到任何同名分支。 日期预计为 RFC3339
符合(例如 yy-mm-ddThh:mm:ssZ)或以秒为单位的整数 Unix 时间。
如果 -F 和 -C 均未指定,则 cvs-fast-export 将根据
存储库大小 - 小型存储库的规范顺序,大型存储库的快速。 工具
消费 git-fast-import 流不应该在意; 这种行为是为了落后
兼容性。
例
一个非常典型的调用如下所示:
找 。 | cvs-fast-export >stream.fi
你的 cvs-fast-export 发行版也应该提供 同步(1)、CVS获取工具
来自远程存储库的 masters。 一起使用它们看起来像这样:
同步 [电子邮件保护]:/来源/格罗夫格罗夫
找到格罗夫 | cvs-fast-export >groff.fi
如果您希望转换运行一段时间,进度报告可以令人放心。 它
随着转换的进行和显示时间,将动画完成百分比
完成。
cvs-fast-export 套件包含一个名为的包装脚本 转换 这对
运行转换并根据 CVS 原件自动检查其内容。
RCS/CVS 限制
将 RCS/CVS 存储库转换为由导入流表示的通用 DVCS 模型是
不仅困难和混乱,还有一些奇怪的 RCS/CVS 案例无法正确
完全翻译。 cvs-fast-export 会尝试警告你这些情况而不是
默默地产生破碎或不完整的翻译,但有龙。 我们推荐
SANITY CHECKING 下的一些预防措施。
CVS-NT 和 1.12 (2004) 之后的 GNU CVS 版本向文件添加了变更集提交 ID
元数据。 没有这些的 CVS 历史的旧部分容易受到各种问题的影响
由客户端之间的时钟偏差引起的; 这曾经是相对常见的多个
原因,包括较少使用 NTP 时钟同步。 cvs-fast-export 将
警告您(“在此日期之前提交缺少 commitids”)当它在您的
历史。 当它发生时,这些警告适用:
· 如果 CVS 存储库中提交的时间戳不够稳定,无法用于
顺序提交,更改可能会以错误的顺序报告。
· 如果不同文件的时间戳顺序与文件内的修订顺序交叉
提交匹配时间窗口,报告的提交顺序可能是错误的。
受 commitids 影响的另一个属性是旧变更集的稳定性
增量倾销。 在发出 commitids 的 CVS 实现下,新的 CVS 提交是
保证不会更改 cvs-fast-export 的变更集派生自以前的历史记录;
因此,使用来自实时 CVS 的增量转储更新目标 DVCS 存储库
安装将工作。 即使历史的旧部分没有 commitids,
转换将是稳定的。 如果您使用的是
不发出 commitids 的 CVS。
另请注意,即使是增量的 CVS 存储库也必须完全重新分析
倾倒; 因此,处理时间和内存要求将随着总存储库的增加而增加
即使增量转储的请求报告间隔很小。
这些问题在 cvs-fast-export 中无法修复; 它们是 CVS 固有的。
CVS-快速导出 参赛要件 AND 限制
由于代码是为处理大型数据集而设计的,因此针对
64 位机器,并没有特别努力保持 32 位清洁。 各种各样的
如果您尝试使用它来提升 32 位机器上的大型存储库,计数器可能会溢出。
仅在分析的母版的子集中出现的分支未正确解析;
相反,将创建一个完全不相交的历史记录,其中包含分支修订和
一切归根结底。
CVS 供应商分支是麻烦的根源。 足够奇怪的进口组合
并且本地修改会翻译得很糟糕,在母版和版上产生不正确的内容
别处。
其他一些 CVS 导出器甚至尝试或已经尝试从共享标签推断变更集
当评论元数据不完美匹配时。 这个没有; 设计师判断
绊倒太多病理性 CVS 标记案例。
该程序确实尝试做一些有用的情况,其中标签出现在一组
不对应于任何 gitspace 提交的修订。 在这种情况下,标记的分支
只创建一个提交,保证你可以检出一组文件
包含标签的 CVS 内容。 分支的根是 gitspace 提交
标记集中的最新 CVS 修订版首先出现的位置; 这是提交
如果它的不完整性被忽略,标签将指向。
运行多线程时,存在一种边缘情况,即程序的行为是
不确定的。 如果同一个标签看起来应该分配给两个不同的
gitspace 使用相同的时间戳提交,它实际落在的标签将是随机的。
cvs-fast-export 被设计为用它的所有中间结构进行翻译
记忆,一口气。 这与 CVS2GIT(1),它使用多次传递和
日志中间结构到磁盘。 权衡是 cvs-fast-export 很多
比 cvs2git 快,但会因 CVS 存储库大的内存不足错误而失败
足以溢出你的物理内存。 在实践中,你不太可能突破这个限制
在具有 32GB RAM 的机器上,实际上肯定不会使用 64GB。 尝试做
另一方面,仅在 32 位 (4GB) 地址空间中的大型转换不太可能
好结局。
程序的瞬时存储要求可能会大很多; 它必须啜饮
每个完整的主文件一次,以便进行增量组装并生成版本
将成为快照的快照。 使用 -t 选项乘以预期数量
线程数量所需的临时存储; 小心使用,因为它很容易
将内存使用量推得如此之高,以至于交换开销压倒了不经常使用的收益
阻塞 I/O。
在 -C 模式下,程序还需要相当于总和的临时磁盘空间
所有文件中所有修订的大小。 这在 -F 模式中并非如此。
在 2014 年的库存 PC 硬件上,cvs-fast-export 实现了高达 64K 的处理速度
CVS 在真实存储库上每分钟提交一次。 时间性能主要受 I/O 限制,并且
可以通过在 SSD 上运行来改进。
理智 检查
转换后,最好执行以下验证步骤:
1. 如果您直接使用 cvs-fast-export 而不是使用 cvsconvert 运行转换,
使用 差异(1) 使用 -r 选项来比较 CVS 头部校验和
转换的存储库。 您应该看到的唯一差异是由于 RCS 关键字引起的差异
由于 CVS 不跟踪文件导致的扩展、.cvsignore 提升和清单不匹配
死亡非常正确。 如果这不是真的,你可能已经发现了一个错误
cvs-快速导出; 请与 CVS 存储库的副本一起报告。
2. 检查翻译的存储库 再生外科医生(1) 寻找(特别是)
错位的标签或分支连接。 通常这些可以手动修复
努力。 这些缺陷做 而不去 必然意味着 cvs-fast-export 中的错误; 他们可能只是
表示 CVS 历史中以前未检测到的畸形。 然而,报告
它们可能有助于改进 cvs-fast-export。
以上是DVCS Migration HOWTO部分缩略版; 浏览它了解更多。
返回 VALUE
如果找到并成功转换了所有文件,则为 0,否则为 1。
ERROR 留言内容
cvs-fast-export 发出的大多数消息都是自我解释的。 这里有一些
不是。 在它说“检查头部”的地方,一定要对头部修订进行完整性检查。
标记无法分配给提交
RCS/CVS 标签是针对每个文件的,而不是针对每个修订版的。 如果开发人员不小心在他们的
使用标记,不可能将标记与任何变更集相关联
cvs-fast-export 解决了。 当这种情况发生时,cvs-fast-export 会发出这个
警告,命名的标签将被丢弃。
子提交在父提交之前发出
导出规范化时出了点问题。 这可能是由 CVS 引起的
提交时间戳的父子关系顺序错误。 尝试
-F 选项。
丢弃死的未标记分支
分析发现一个没有标签的 CVS 分支完全由死修订组成。 这些
在转换时不能在 CVS 的存档状态中可见; 这是
可能它们在某个时间点作为分支内容可见
存储库的过去,但没有识别标签,状态是不可能的
重建。
警告 - 未命名的分支
带有实时修订的 CVS 分支缺少头部标签。 带有“-UNNAMED-BRANCH”的标签
将生成后缀到父分支的名称。
警告 - 没有生成主分支
cvs-fast-export 无法识别默认 (HEAD) 分支,因此没有
转换中的“主人”; 这会严重混淆 git 和其他 VCSes
当他们尝试导入输出流时。 您或许能够识别并重命名一个
主分支使用 再生外科医生(1)。
警告 - xxx 比 yyy 新
在 CVS 主文件分析的早期,其增量的时间排序顺序不匹配
由修订号定义的拓扑顺序。 最可能的原因
是非常旧的 CVS 版本中客户端之间的时钟偏差。 该计划将尝试
通过将无序提交的修订日期调整为
其父级,但这可能无法防止稍后分析中的其他时间偏差错误。
提示提交早于估算分支加入
当文件分支时,在稍后阶段报告与“比”类似的问题
正在被编入变更集分支。 集合中的一个 CVS 分支即将出现
合并到 gitspace 分支的提示提交比最早的提交更早
集合中某些(其他)提示的父级。 冒险分支被剪断
关闭。
一些父提交比孩子年轻
可能表明 cvs-fast-export 以错误的顺序聚合了一些变更集;
可能无害,但检查头部。
警告 - 分支点晚于分支
在分析后期,在变更集 DAG 中将分支连接到其父级时,
分支的根提交的提交日期早于父提交的日期
它连接到。 可能是另一个时钟偏差症状,或者可能指向
程序拓扑分析错误。 检查连接附近的提交
再生外科医生(1); 分支可能需要手动重新设置父级。
超过一个编号为 XYZ 的增量
CVS 历史记录包含重复的文件增量编号。 永远不应该发生,并且可能
如果有,则指示损坏的 CVS 存档; 检查头。
{revision|patch} 具有奇数深度
永远不应该发生; 只有分支号应该有奇数深度,而不是文件
增量或补丁号。 可能表示 CVS 存档已损坏; 检查头。
CVS master 中的重复标签,忽略
一个 CVS master 有多个相同标签的实例指向不同的文件增量。
可能是 CVS 操作员错误并且相对无害,但请检查标签的
转换中的referent 是有道理的。
清理后标签或分支名称为空
致命错误:删除所有对 git 来说非法的字符后,标记名称为空。
可能表示损坏的 RCS 文件。
修订号太长,增加 CVS_MAX_DEPTH
致命错误:内部缓冲区太短,无法处理存储库中的 CVS 修订版。
在 cvs.h 中增加这个常量并重建。 警告:这会增加内存使用量
并大大减慢测试速度。
快照序列号太大,加宽serial_t
致命错误:CVS 存储库中的文件快照数量超出了内部
柜台。 从源代码重建 cvs-fast-export,并将更宽的 serial_t 修补到 cvs.h 中。
警告:这将显着增加工作集的大小
分支太多,加宽 branchcount_t
致命错误:从某个单一提交产生的分支数量超过了
内部计数器。 使用更宽的 branchcount_t 从源重建 cvs-fast-export
修补到 cvs.h。 警告:这将显着增加工作集的大小
内部错误 - 分支循环
cvs-fast-export 在按父链接对提交进行拓扑排序时发现了一个循环。 这个
永远不应该发生,并且可能表明存在严重的内部错误:请提交错误
报告。
内部错误 - 丢失标签
在分析后期(在变更集合并之后),一个标签丢失了它的提交引用。 这个
永远不应该发生并且可能表示内部错误:请提交错误
报告。
REPORTING BUGS
向 Eric S. Raymond 报告错误[电子邮件保护]>. 项目页面位于
http://catb.org/~esr/cvs-fast-export
使用 onworks.net 服务在线使用 cvs-fast-export