Décidémment, plus je travaille avec, plus j’adore git. Le problème, c’est qu’il y a encore un paquet de logiciels qui utilisent l’ancêtre CVS. CVS, c’est comme le minitel : c’était bien à l’époque, mais ça a mal vieilli.
Ô joie ! J’ai finalement réussi à trouver une méthode à peu près potable pour travailler avec git sur un dépot CVS. C’est loin d’être la panacée, mais c’est mieux que rien. Suivez le guide.
Première étape : installer le paquet git-cvs. Si vous utilisez un système de paquet digne de ce nom, il vous installera toutes les dépendances nécessaires, dont cvsps.
# Sur ubuntu sudo apt-get install git-cvs
Ensuite, on va créer deux dépots (oui, c’est naze, mais je n’ai pas trouvé mieux), un cvs et un git :
# racine du projet mkdir projet && cd projet export CVSROOT=... cvs login cvs checkout -d cvs <module> git cvsimport -C git -a -k -v -m -p -Z,9 <module>
Vous voulez savoir ce que signifient toutes ces belles options ? Facile :
man git-cvsimportVous allez vous retrouver avec deux répertoires : cvs contient le dépot CVS (normal), et git contient le dépot git (facile). Ça va, les neurones ne chauffent pas trop ?
Bon, on va se placer dans le dépot git.
cd gitBien entendu, on ne va pas développer directement sur la branche master, n’est-ce pas ?
git branch # * master git checkout -b dev # Switched to a new branch "dev" # dev dev dev git add ... git commit
On se retrouve alors avec plusieurs commit, qu’on voudrait reporter sur le dépot CVS. (Note : Vous aurez beaucoup moins de problème si la branch dev est propre. Si vous avez des modifs en cours, utilisez git stash) Ça va se faire en plusieurs étapes :
# 1- On retourne sur la branche master, pour la synchroniser avec le cvs git checkout master cd .. ls # cvs git # 2- On répète la commande d'import, qui cette fois va effectuer un update git cvsimport -C git -a -k -v -m -p -Z,9 <module> cd git # 3- On merge les modifs de la branche de dev git merge --squash dev # Le squash permet de grouper tous les commits de la branche de dev en un seul gros commit. # Ça sera plus pratique et plus propre pour exporter vers le dépot CVS. # 4- On retourne dans le dépot CVS, pour le mettre a jour cd ../cvs cvs update # 5- Pour reporter les modifs, on a besoin d'indiquer où est le dépot git export GIT_DIR="/chemin/vers/projet/git/.git" # 6- On insere les devs dans le dépot CVS git cvsexportcommit -v <commit> # Ou <commit> est le hash du commit que vous voulez reporter # Cette commande va générer un patch à partir du dépot git, et l'appliquer au dépot CVS # À ce stade, vos dépots locaux cvs et git sont équivalents # 7- Il reste à reporter les modifs sur le serveur CVS cvs commit
Et voilà. Je sais, la procédure est loin d’être évidente. À vrai dire, je serai heureux de découvrir qu’il existe un moyen de faire plus simple. Si quelqu’un trouve mieux, je suis preneur.
En attendant, amusez vous bien avec git.
One Trackback
[...] dernière fois, j’ai posté une méthode pour interfacer git avec un dépot CVS. Et bien aujourd’hui, on va faire pareil, mais avec un dépot subversion. Comme [...]