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 passer facilement du CVS au Git?

63
demandé sur Shiva 2009-05-19 09:58:50

11 réponses

Le seul outil qui a incrémentale importer semble être git-cvsimport . Si vous souhaitez convertir ( migrer ) de CVS en git, la meilleure solution pour l'instant semble être mentionné ci-dessus cvs2git mode de cvs2svn .

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

32
répondu Jakub Narębski 2014-04-29 17:25:23

cvs2git

en plus des réponses fournies, voici un guide sur la façon de convertir cvs en git à l'aide de l'outil cvs2git. Ici, modulename est un nom du répertoire CVS que vous souhaitez importer.

prérequis

Le paquet

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

mise à jour: les étapes 1 et 2 ne sont pas entièrement correctes - avant de tenter, lisez le commentaire ci-dessous de mhagger, le responsable de cvs2git

  1. checkout modulename

    cvs -d URL co -P modulename
    
  2. create an empty CVSROOT neededed by 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é" avec pas de mot de passe)

  4. modifier cvs2git.le fichier d'options. Remplacer r'test-données/main-cvsrepos' avec 'modulename'. Modifier les auteurs transforme.

    # edit this
    run_options.set_project(  r'modulename',
    
    # and this
    author_transforms={
        'jrandom' : ('J. Random', 'jrandom@example.com'),
        'mhagger' : 'Michael Haggerty <mhagger@alum.mit.edu>',
    
  5. exécuter cvs2git pour créer des fichiers git temp

    cvs2git  --options=cvs2git.options --fallback-encoding utf-8
    
  6. créer un dépôt git

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

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

    git reset --hard
    
17
répondu Vanuan 2016-05-08 23:46:42

cvs2svn a un mode cvs2git .

13
répondu bdonlan 2009-05-19 06:01:48

si quelqu'un a encore la malchance d'utiliser CVS, vous pouvez essayer "crap": https://github.com/rcls/crap Il est rapide (dans la mesure où l'accès à CVS peut être rapide), prend en charge les mess que vous trouvez dans les CVs repos, et incrémental.

8
répondu user2603340 2013-07-21 02:01:41

une alternative pourrait être d'utiliser git cvsimport *

7
répondu ralphtheninja 2009-05-19 07:13:14

Je n'ai pas essayé moi-même, mais des amis ont rapporté de bons succès en convertissant d'abord de CVS en SVN, puis de SVN en Git. Il semble que les outils pour effectuer ces transitions respectives ont été plus profondément secoués qu'une transition directe CVS-Git.

5
répondu Dave W. Smith 2009-05-19 06:08:56

vous pouvez ajouter de CVS à la liste. Il convertit bien et est très rapide et aussi incrémentielle. Il ne fait pas les étiquettes collantes, seulement les branches, cependant.

2
répondu robinr 2009-05-25 12:08:11

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

cvs2git crée parfois (pour autant que je me souvienne) de fausses branches pour tags.

git-cvsimport ne supporte pas les étiquettes multiples pour un ensemble de modifications. Il est cependant possible d'apporter quelques modifications supplémentaires pour cvsps afin de le prendre en charge et de changer le git-cvsimport original en quelque chose qui utilise cvsps mis à jour (je l'ai essayé et cela semble fonctionner). Du côté de l'avantage, il prend en charge les mises à jour progressives et a une certaine logique pour importer correctement les fusions (mais elle nécessite un format approprié pour le message de propagation).

parsecvs jusqu'à présent m'a donné les meilleurs résultats. Malheureusement, le code disponible sur le web ne se compile pas correctement avec le dernier git. Le changement bien que non trivial est faisable.

EDIT: Ça ressemble à du ESR a pris cvsps et parsecvs il y a donc de l'espoir pour CVS - > migration GIT. Mais il a déjà mentionné sur une liste de diffusion qu'il pourrait déclarer certains des outils qu'il a repris récemment officiellement morts.

2
répondu Tomek 2013-01-10 17:13:56

vous pouvez utiliser git cvsimport . Il nécessite cvsps pour être installé, mais vous devez installer 2.x, 3.x est Non incompatible plus.

importe ensuite CVS repository sur Git vide. Exemple d'utilisation:

git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:anonymous@reponame.cvs.sourceforge.net:/cvsroot/path ModuleName

sur OSX vous installez cvsps-2.1 de la manière suivante (avec brew ):

brew tap homebrew/versions
brew install cvsps2
brew link  cvsps2

vous pouvez aussi utilisez cvs2git outil qui peut convertir un dépôt CVS en git. Cependant, vous devez avoir accès à un répertoire CVSROOT.

Vérifier cvs2git documentation les étapes de l'installation.

exemple d'usage:

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

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

ces fichiers peuvent être importés dans un dépôt git vide par:

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

puis supprimer la branche TAG.FIXUP et exécuter gitk --all pour afficher les résultats de la conversion.

Vérifiez pour plus, en exécutant: cvs2git --help .

1
répondu kenorb 2017-05-23 11:53:55

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

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

il suit l'essence de celui qui a fonctionné pour moi pour créer un dépôt git à partir d'un dépôt 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 parce que cvs2git a besoin d'accéder à toute l'histoire. Une simple caisse ne suffit pas.

1
répondu josch 2015-09-12 10:35:36

j'ai trouvé cvs-fast-export a fait un excellent travail. J'ai dû le télécharger et le compiler moi-même, mais je n'ai eu aucun problème significatif à le faire.

0
répondu Edward Falk 2016-04-14 01:43:13