web-dev-qa-db-fra.com

Existe-t-il un outil de migration de CVS vers Git?

J'ai l'intention de passer de CVS à Git. Dans le cas de SVN, il semble y avoir cvs2svn. Existe-t-il un outil similaire pour migrer facilement de CVS vers Git? 

63
freddiefujiwara

Le seul outil pouvant importer incremental semble être git-cvsimport . Si vous voulez convertir (migrate) de CVS en Git, la meilleure solution pour le moment semble être mentionnée plus haut mode cvs2git de cvs2svn .

Voir aussi Interfaces Frontends And Tools page sur le wiki Git, section sur l’interaction avec d’autres systèmes de contrôle de révision.

32
Jakub Narębski

cvs2git

En plus des réponses fournies, voici un guide sur la conversion de cvs en git à l'aide de l'outil cvs2git. Modulename est ici le nom du répertoire CVS que vous souhaitez importer.

Conditions préalables

Le package cvs2svn (qui inclut la commande cvs2git) devrait déjà être installé.

Mise à jour: les étapes 1 et 2 ne sont pas tout à fait correctes - avant d'essayer, lisez le commentaire ci-dessous de mhagger, responsable de la maintenance de cvs2git.

  1. checkout modulename

    cvs -d URL co -P modulename
    
  2. créer un CVSROOT vide nécessaire à cvs2git

    mkdir modulename/CVSROOT
    
  3. téléchargez un exemple de cvs2git.options à http://cvs2svn.tigris.org/svn/cvs2svn/trunk/cvs2git-example.options (utilisateur "invité" sans mot de passe)

  4. éditez le fichier cvs2git.options. Remplacez r'test-data/main-cvsrepos 'par' modulename '. Modifier les auteurs se transforme.

    # edit this
    run_options.set_project(  r'modulename',
    
    # and this
    author_transforms={
        'jrandom' : ('J. Random', '[email protected]'),
        'mhagger' : 'Michael Haggerty <[email protected]>',
    
  5. lancez cvs2git pour créer des fichiers temporaires git

    cvs2git  --options=cvs2git.options --fallback-encoding utf-8
    
  6. créer un référentiel git

    mkdir gitrepo && cd gitrepo && git init .
    
  7. importer à partir de fichiers temporaires git créés par cvs2git

    cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import
    
  8. copie de travail de caisse

    git reset --hard
    
17
Vanuan

cvs2svn a un mode cvs2git .

13
bdonlan

Si quelqu'un a encore le malheur d'utiliser CVS, vous pouvez essayer "merde": https://github.com/rcls/crap C'est rapide (dans la mesure où l'accès à CVS peut être rapide), soutient le désordres que vous trouvez dans cvs repo, et incrémental.

8
user2603340

Une alternative pourrait être d'utiliser git cvsimport *

7
ralphtheninja

Je n'ai pas essayé cela moi-même, mais des amis ont rapporté un bon succès en convertissant d'abord de CVS à SVN, puis de SVN à Git. Il semble que les outils permettant de faire ces transitions respectives aient été plus complètement ébranlés qu'une transition directe CVS vers Git.

5
Dave W. Smith

J'ai essayé cvs2git, git-cvsimport et parsecvs.

cvs2git crée parfois (pour autant que je m'en souvienne) de fausses branches pour les tags.

git-cvsimport ne prend pas en charge plusieurs balises pour un changeset. Cependant, il est possible de récupérer quelques modifications supplémentaires pour que cvsps le supporte et de changer le git-cvsimport original en quelque chose qui utilise des cvsps mis à jour (je l’ai essayé et cela semble fonctionner). Du côté des avantages, il prend en charge les mises à jour incrémentielles et dispose d’une logique pour importer correctement les fusions (mais il EXIGE le format approprié pour le message de validation).

parsecvs jusqu'à présent m'a donné les meilleurs résultats. Malheureusement, le code disponible sur le Web ne se compile pas proprement avec le dernier git. Le changement sans être trivial est faisable.

EDIT: Il semble que ESR ait pris le contrôle de cvsps et parsecvs il y a donc de l’espoir pour la migration de CVS-> GIT. MAIS il a déjà mentionné sur une liste de diffusion qu’il pourrait déclarer certains des outils qu’il a récemment pris en charge est officiellement mort.

2
Tomek

Vous pouvez ajouter fromcvs à la liste. Il convertit bien et est extrêmement rapide et également incrémental. Il ne fait pas de tags collants, mais seulement des branches. 

2
robinr

Vous pouvez utiliser git cvsimport. Il faut installer cvsps, mais vous devez installer 2.x, car 3.x est pas incompatible plus.

Importez ensuite le référentiel CVS sur un git vide. Exemple d'utilisation:

git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:[email protected]:/cvsroot/path ModuleName

Sur OSX, vous installez cvsps-2.1 de la manière suivante (ayant brew):

brew tap homebrew/versions
brew install cvsps2
brew link  cvsps2

Vous pouvez également utiliser cvs2git tool pour convertir un référentiel CVS en git. Cependant, vous devez avoir accès à un répertoire CVSROOT.

Consultez la documentation cvs2git pour connaître les étapes d’installation.

Exemple d'utilisation:

cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo

Cela créerait deux fichiers de sortie au format d'importation rapide git. Les noms de ces fichiers sont spécifiés par votre fichier d'options ou vos arguments de ligne de commande. Dans l'exemple, ces fichiers s'appellent cvs2git-tmp/git-blob.dat et cvs2git-tmp/git-dump.dat.

Ces fichiers peuvent être importés dans un référentiel git vide par:

cat git-blob.dat git-dump.dat | git fast-import

Supprimez ensuite la branche TAG.FIXUP et exécutez gitk --all pour afficher les résultats de la conversion.

Recherchez-en plus en lançant: cvs2git --help.

1
kenorb

J'ai lu la réponse de Vanuan et les commentaires de Mhagger. Malheureusement, Mhagger n'a pas posté comment faire avec cvs2git. Tout cela est très bien écrit ici: http://www.mcs.anl.gov/~jacob/cvs2svn/cvs2git.html

J'ai utilisé cvs2git au lieu de git-cvsimport car la documentation de git-cvsimport suggère de l'utiliser pour éviter les problèmes de git-cvsimport: https://www.kernel.org/pub/software/scm/git/docs/git-cvsimport.html #problèmes

Il s’ensuit essentiellement que cela a fonctionné pour moi de créer un référentiel git à partir d’un référentiel CVS sourceforge sur Debian Sid:

$ apt-get install cvs2svn cvs
$ mkdir project.cvs
$ rsync -av rsync://${PROJECT}.cvs.sourceforge.net/cvsroot/${PROJECT}/ project.cvs
$ cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git project.cvs
$ mkdir project.git
$ cd project.git
$ git init
$ cat ../git-blob.dat ../git-dump.dat | git fast-import

L'étape rsync est nécessaire car cvs2git doit accéder à l'historique complet. Une simple commande ne suffit pas.

1
josch

J'ai trouvé cvs-fast-export a fait un excellent travail. Je devais le télécharger et le compiler moi-même, mais je n'avais aucun problème important à le faire.

0
Edward Falk