2009-07-29 6 views
4

J'essaie de git-cvsimport plusieurs modules différents de CVS, qui sont tous sur des branches différentes.Comment puis-je git-cvsimporter plusieurs modules à partir d'un dépôt CVS, avec des branches différentes?

Jusqu'à présent, je l'ai déjà fait (dans le code pseudo-bash):

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

Mais ce fait un dépôt git différent pour chaque module. Comment pourrais-je les fusionner en un, si c'est même possible?

Répondre

1

En théorie, vous pouvez utiliser git grafts pour fusionner vos dépôts en un seul:
Voir "Is there a clean way to handle two original git repositories that started with the same content?"

Dans la pratique, vous voudrez peut-être regarder un autre outil comme cvs2git, et vérifier si elle ne le fait pas importer les succursales d'une manière plus cohérente.

+0

Il est dit que vous avez besoin d'un accès direct au référentiel pour utiliser cvs2git. Si vous avez juste accès à distance, c'est un hack, apparemment. – Neil

2

Ce que je l'ai fait est modifié le script perl git-de cvsimport, j'ai changé la méthode update_index() de:

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

Pour:

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

(Notez l'ajout du $cvs_tree variable.)

Fonctionne comme un charme. Pour exécuter:

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

juste essayé avec 1.7.5 sur centos 5.5 et il a échoué. essayé perl/usr/local/libexec/git-core/git-cvsimport -v -d/root/cvs_mirror/java -C testdir -r cvs -k –

+0

l'oublier, j'ai compris: il faut ajouter le chemin complet vers le repo comme le nom du module - il n'était pas clair à partir de votre description: la ligne de commande correcte est git cvsimport -v -d/chemin/vers/repo -C testdir -r cvs -k/chemin/vers/repo –

Questions connexes