Как я могу git-cvsimport несколько модулей из хранилища CVS, с различными ветвями? - PullRequest
5 голосов
/ 30 июля 2009

Я пытаюсь git-cvsimport несколько разных модулей из CVS, все они находятся в разных ветках.

Пока что я сделал это (в псевдо-bash-коде):

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

Но это создает разные репозитории для каждого модуля . Как бы я объединил их всех в одно, если это вообще возможно?

Ответы [ 2 ]

2 голосов
/ 13 декабря 2010

Что я сделал, так это изменил Perl-скрипт git-cvsimport. Я изменил метод 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 голос
/ 30 июля 2009

Теоретически, вы можете использовать git grafts , чтобы объединить ваши репозитории в один:
См. «Существует ли чистый способ обработки двух исходных репозиториев git, которые начинались с одного и того же содержимого?»

На практике вы можете захотеть взглянуть на другой инструмент, например cvs2git , и проверить, не импортирует ли он ветвления более согласованным образом.

...