我如何从具有不同分支的CVS存储库中git-cvsimport多个模块?

时间:2009-07-29 22:44:28

标签: git cvs version-control git-cvs

我正在尝试git-cvsimport来自CVS的几个不同模块,所有模块都在不同的分支上。

到目前为止,我已完成此操作(使用伪bash代码):

for each ($MODULE, $BRANCH); do
    git-cvsimport -p x -v -d "$CVS_REPO" "$MODULE" -o "$BRANCH" -C "$MODULE"
done

但是为每个模块创建了不同的git存储库。如果可能的话,我怎么把它们合并成一个呢?

2 个答案:

答案 0 :(得分:2)

我所做的是修改了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)

答案 1 :(得分:1)

理论上,您可以使用 git grafts 将您的存储库合并为一个:
"Is there a clean way to handle two original git repositories that started with the same content?"

在实践中,您可能希望查看其他工具,例如 cvs2git ,并检查它是否以更一致的方式导入分支。