我怎样才能的git-cvsimport从CVS仓库多个模块,具有不同的分支?(How can I g

2019-07-31 02:37发布

我想要git-cvsimport从CVS几个不同的模块,所有这些都在不同的分支。

到目前为止,我已经这样做了(伪bash代码):

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

但是,这使得每个模块不同的Git仓库 。 如何将它们合并各成一体,如果这甚至远程可能吗?

Answer 1:

从理论上讲,你可以使用git的移植到你的仓库合并为一个:
见“有一个干净的方式来处理相同内容的开始两个原始的git仓库?”

在实践中,你可能想看看像其他工具cvs2git ,并检查它是否不以更加一致的方式导入分支。



Answer 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)


文章来源: How can I git-cvsimport multiple modules from a CVS repository, with differing branches?