我正在尝试git-cvsimport
来自 CVS 的几个不同模块,所有这些模块都位于不同的分支上。
到目前为止,我已经完成了这个(在伪 bash 代码中):
for each ($MODULE, $BRANCH); do
git-cvsimport -p x -v -d "$CVS_REPO" "$MODULE" -o "$BRANCH" -C "$MODULE"
done
但这为每个模块创建了不同的 git 存储库。如果可能的话,我将如何将它们全部合并为一个?
我正在尝试git-cvsimport
来自 CVS 的几个不同模块,所有这些模块都位于不同的分支上。
到目前为止,我已经完成了这个(在伪 bash 代码中):
for each ($MODULE, $BRANCH); do
git-cvsimport -p x -v -d "$CVS_REPO" "$MODULE" -o "$BRANCH" -C "$MODULE"
done
但这为每个模块创建了不同的 git 存储库。如果可能的话,我将如何将它们全部合并为一个?
我所做的是修改了 git-cvsimport perl 脚本,我改变了update_index()
方法:
子更新索引(\@\@){ 我的 $old = 班次; 我的 $new = 班次; 打开(我的 $fh,'|-',qw(git update-index -z --index-info)) 或死“无法打开 git update-index: $!”; 打印 $fh (地图{“0 00000000000000000000000000000000000000000\t$_\0”} @$旧), (map { '100' . sprintf('%o', $_->[0]) . " $_->[1]\t$_->[2]\0" } @$新) 或死“无法写入 git update-index: $!”; 关闭 $fh 或死“无法写入 git update-index: $!”; 美元?并死“git update-index 报告错误:$?”; }
至:
子更新索引(\@\@){ 我的 $old = 班次; 我的 $new = 班次; 打开(我的 $fh,'|-',qw(git update-index -z --index-info)) 或死“无法打开 git update-index: $!”; 打印 $fh (地图{“0 00000000000000000000000000000000000000000\t$cvs_tree/$_\0”} @$旧), (map { '100' . sprintf('%o', $_->[0]) . " $_->[1]\t$cvs_tree/$_->[2]\0" } @$新) 或死“无法写入 git update-index: $!”; 关闭 $fh 或死“无法写入 git update-index: $!”; 美元?并死“git update-index 报告错误:$?”; }
(注意$cvs_tree
变量的添加。)
奇迹般有效。执行:
perl git-cvsimport -v ...(其余常规 git-cvsimport 参数)
从理论上讲,您可以使用git 移植将您的存储库合并为一个:
请参阅“是否有一种干净的方法来处理两个以相同内容开头的原始 git 存储库?”
在实践中,您可能希望查看另一个工具,例如cvs2git,并检查它是否没有以更一致的方式导入分支。