我想要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的移植到你的仓库合并为一个:
见“有一个干净的方式来处理相同内容的开始两个原始的git仓库?”
在实践中,你可能想看看像其他工具cvs2git ,并检查它是否不以更加一致的方式导入分支。
我所做的是修改的git-cvsimport Perl脚本,我已经改变了update_index()
方法来自:
sub update_index (\@\@) { my $old = shift; my $new = shift; open(my $fh, '|-', qw(git update-index -z --index-info)) or die "unable to open git update-index: $!"; print $fh (map { "0 0000000000000000000000000000000000000000\t$_\0" } @$old), (map { '100' . sprintf('%o', $_->[0]) . " $_->[1]\t$_->[2]\0" } @$new) or die "unable to write to git update-index: $!"; close $fh or die "unable to write to git update-index: $!"; $? and die "git update-index reported error: $?"; }
至:
sub update_index (\@\@) { my $old = shift; my $new = shift; open(my $fh, '|-', qw(git update-index -z --index-info)) or die "unable to open git update-index: $!"; print $fh (map { "0 0000000000000000000000000000000000000000\t$cvs_tree/$_\0" } @$old), (map { '100' . sprintf('%o', $_->[0]) . " $_->[1]\t$cvs_tree/$_->[2]\0" } @$new) or die "unable to write to git update-index: $!"; close $fh or die "unable to write to git update-index: $!"; $? and die "git update-index reported error: $?"; }
(请注意添加的$cvs_tree
变量)。
奇迹般有效。 执行:
perl git-cvsimport -v ... (rest of regular git-cvsimport arguments)