Embauchez-moi

Je suis freelance ! Besoin d'un professionnel du développement web ? Pourquoi ne pas me passer un coup de fil ?

Plus d'infos sur… http://thibault.jouannic.fr

mots-cles : Ingénieur web freelance Symfony eZ Publish Solr

Utiliser Git pour travailler sur un dépot CVS

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-cvsimport

Vous 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 git

Bien 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

  1. [...] 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 [...]