2009-07-29 11 views
4

Ich versuche git-cvsimport mehrere verschiedene Module von CVS, die alle in verschiedenen Zweigen sind.Wie kann ich mehrere Module aus einem CVS-Repository mit unterschiedlichen Zweigen git-cvsimportieren?

Bisher habe ich dies getan (in pseudo-Bash-Code):

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

Aber das macht ein anderes Git Repository für jedes Modul. Wie würde ich sie alle zu einem zusammenführen, wenn das auch nur entfernt möglich ist?

Antwort

1

Theoretisch könnten Sie git grafts verwenden Ihre Repositories zu einem verschmelzen:
"Is there a clean way to handle two original git repositories that started with the same content?" Siehe

In der Praxis könnten Sie an einem anderen Tool wie cvs2git, aussehen wollen und prüfen, ob es nicht der Fall ist Importieren Sie Zweige in einer konsistenteren Weise.

+0

Es besagt, dass Sie direkten Zugriff auf das Repository benötigen, um cvs2git zu verwenden. Wenn Sie nur Fernzugriff haben, ist es offensichtlich ein Hack. – Neil

2

Was ich getan habe, geändert wird, um die git-cvsimport Perl-Skript, habe ich geändert, um die update_index() Methode aus:

 
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: $?"; 
} 

An:

 
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: $?"; 
} 

(Beachten Sie die Zugabe des $cvs_tree variabel.)

Funktioniert wie ein Charme. Zur Ausführung:

 
perl git-cvsimport -v ... (rest of regular git-cvsimport arguments) 
+0

gerade mit 1.7.5 auf Centos 5.5 versucht und es ist fehlgeschlagen. probiert perl/usr/lokal/libexec/git-core/git-cvsimport -v -d/root/cvs_mirror/java -c testdir -r cvs -k –

+0

vergiss es, ich habe es: man muss den vollständigen Pfad hinzufügen der Repo als Modulname - es war nicht klar aus Ihrer Beschreibung: Die richtige Kommandozeile ist git cvsimport -v -d/pfad/zu/repo -C testdir -r cvs -k/pfad/zu/repo –