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?
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.
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).
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.
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
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