web-dev-qa-db-fra.com

Migrer de CVS vers Git sans perdre l'historique

J'ai besoin de savoir s'il existe un moyen de migrer mon code du contrôle de source CVS vers Git?

Si oui, qu'en est-il de mon histoire de commits?

33
Ahmed Alaa

Je n'ai pas personnellement converti CVS en Git, mais je crois que cvs-fast-export d'Eric Raymond est l'outil à utiliser. Il a la page de manuel publiée ici . cvsps est un autre outil maintenu par Eric, mais il a récemment été déconseillé en faveur de cvs-fast-export. cvs2git est un autre outil basé sur les mêmes machines que cvs2svn. Ce dernier était extrêmement habile, et j’espère donc beaucoup que cvs2git est tout aussi bon.

Une chose à noter: CVS est un joli RCS brisé. Il est possible que son contenu puisse ne pas être reflété exactement dans Git. Pour l’instant, il existe une certaine impédance de désadaptation, mais les outils s’efforcent de préserver le plus possible. Assurez-vous de vérifier votre conversion et que vous êtes satisfait du résultat. Vous devrez peut-être corriger une partie de l’historique de Git pour obtenir quelque chose de plus acceptable, mais je doute que vous en ayez besoin.

16
John Szakmeister

Voici le processus que j’utilisais pour migrer un dépôt CVS SourceForge vers Git en utilisant cvs2git ( la dernière version stable est ici , mais IIRC j’ai utilisé la version dev de github), qui fonctionne sans Windows compilation requise puisqu'il s'agit juste de Python:

Comment importer du CVS sourceforge dans git.
Tout d’abord, vous devez télécharger/commander le dépôt CVS avec l’ensemble de l’historique (pas seulement le HEAD/Trunk):

rsync -av rsync://PROJECT.cvs.sourceforge.net/cvsroot/PROJECT/\* cvs  

puis utilisez cvs2git (script python, fonctionne sur toutes les plateformes, aucune compilation nécessaire):

python cvs2git --blobfile="blob.dat" --dumpfile="dump.dat" --username="username_to_access_repo" --options=cvs2git.options --fallback-encoding utf-8 cvs  

cela aurait dû générer deux fichiers blob et dump contenant tout votre historique cvs. Vous pouvez les ouvrir dans un éditeur de texte pour vérifier que le contenu semble correct.

puis initialisez votre dépôt git dans un autre dossier:

mkdir gitexport/
cd gitexport
git init  

puis chargez l'historique cvs exporté sur git:

cat ../cvs/{blob,dump}.dat | git fast-import  

puis placez le curseur git commit à la fin de l'historique:

git reset --hard  

enfin et éventuellement, vous pouvez pousser vers votre référentiel git distant:

git Push -u Origin master  

bien sur vous avez besoin avant de git remote add Origin https: // your_repo_url

Remarque: cvs2git.options est un fichier de configuration au format JSON pour cvs2git dans lequel vous pouvez spécifier des transformations pour différents éléments tels que les noms d'auteur (pour que leurs pseudonymes soient automatiquement transformés en leur nom complet après l'importation). Voir le documentation ici ou le exemple de fichier d'options inclus .

De plus, vous n'avez pas besoin de posséder le référentiel avec cette méthode, vous pouvez migrer des projets SourceForge que vous ne possédez pas (vous avez simplement besoin du droit de passer à la caisse, donc cela fonctionne sur n'importe quel référentiel public).

21
gaborous

Vous pouvez utiliser git-cvsimport pour importer votre référentiel CVS dans Git. Par défaut, cela vérifiera chaque révision, ce qui vous donnera un historique relativement complet.

Selon votre système d'exploitation, vous devrez peut-être installer le support pour cela séparément. Par exemple, sur un ordinateur Ubuntu, vous aurez besoin du paquetage git-cvs.

Cette réponse va plus en détail.

10
Chris

J'ai récemment utilisé (2016) restituer d'Eric Raymond pour importer un dépôt CVS de Sourceforge vers Git. J'ai été très agréablement surpris et cela a très bien fonctionné . Après des expériences passées avec cvs2svn et d'autres outils, je recommande sans hésitation le reposeur pour ce type de tâches.

Eric a posté un guide de migration simple ici

3
crististm

Afin de cloner un projet de sourceforge à github, j'ai effectué les étapes suivantes.

PROJECT=some_sourceforge_project_name
GITUSER=rubo77
rsync -av rsync://a.cvs.sourceforge.net/cvsroot/$PROJECT/\* cvs
svn export --username=guest http://cvs2svn.tigris.org/svn/cvs2svn/trunk cvs2svn-trunk
cp ./cvs2svn-trunk/cvs2git-example.options ./cvs2git.options
vim cvs2git.options # edit run_options.set_project
cvs2svn-trunk/cvs2git --options=cvs2git.options --fallback-encoding utf-8

créer un git vide à https://github.com/$GITUSER/$PROJECT.git

git clone [email protected]:$GITUSER/$PROJECT.git $PROJECT-github
cd $PROJECT-github
cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import
git log
git reset --hard
git Push
0
rubo77