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

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

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

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

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

2 ответа

Решение

Теоретически, вы можете использовать Git Grafts для объединения ваших репозиториев в одно:
Смотрите "Есть ли чистый способ обработки двух оригинальных git-репозиториев, которые начинались с одного и того же контента?"

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

Что я сделал, так это изменил скрипт perl git-cvsimport, я изменил update_index() метод от:

sub update_index (\ @ \ @) {
    мой $old = shift;
    мой $ новый = сдвиг;
    open(my $fh, '|-', qw(git update-index -z --index-info))
        или умри "не могу открыть git update-index: $!";
    печатать $ fh
        (карта { "0 0000000000000000000000000000000000000000\t$_\0" }
            @$ Старый),
        (map { '100' . sprintf('%o', $_->[0]) . " $_->[1]\t$_->[2]\0" }
            @$ Новый)
        или умри "не могу написать в git update-index: $!";
    закрыть $ fh
        или умри "не могу написать в git update-index: $!";
    $? и умереть "git update-index сообщил об ошибке: $?";
}

Для того, чтобы:

sub update_index (\ @ \ @) {
    мой $old = shift;
    мой $ новый = сдвиг;
    open(my $fh, '|-', qw(git update-index -z --index-info))
        или умри "не могу открыть git update-index: $!";
    печатать $ fh
        (карта { "0 0000000000000000000000000000000000000000\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)
Другие вопросы по тегам