Messages étiquettés git

Dériver d’un projet CVS pour en héberger sa propre version GIT

Chu-Chu Rocket! Voilà un jeu de puzzles qu’il est bien ! Encore faut-il pouvoir encore y jouer. À l’époque, c’était sur Game Boy Advance que ça se passait. Joie dans mon coeur, il en existe un émulateur : Visual Boy Advance, hébergé sur sourceforge.net, plus maintenu depuis 5 ans. Les binaires disponibles sont compatibles 32 bits, les sources eux font des raccourcis sur la taille des pointeurs… De toute évidence, si on veut pouvoir libérer les souris du joug des chats tyrans, il va falloir mettre les mains dans le cambouis. Mais comment reprendre la main sur ce projet ?

Aspirer une sauvegarde du dépôt CVS depuis Sourceforge.net

La FAQ de sourceforge.net est très claire là dessus, il n’y a aucun mystère ; une seule commande suffit :

rsync -av rsync://vba.cvs.sourceforge.net/cvsroot/vba/* .

Et nous voilà avec le beau répertoire VisualBoyAdvance qui contient toute la sauvegarde du projet original, format CVS.

Extraire du dépôt CVS local les informations nécessaires à l’initialisation du dépôt GIT

La documentation de la fondation Apache aide également :

cvs2git --blobfile=cvs2svn-tmp/git-blob.dat --dumpfile=cvs2svn-tmp/git-dump.dat --username=cvs2git VisualBoyAdvance

L’outil cvs2git étant une surcouche d’un autre outil, cvs2svn, je ne suis pas sûr qu’on ait une quelconque liberté pour la valeur à donner aux options blobfile et dumpfile. Dans tous les cas, on s’en moque un peu.

Monter un dépôt GIT de toute pièce

Toujours en lisant l’aide précédente :

git init --bare VisualBoyAdvance.git
cd VisualBoyAdvance.git
cat ../cvs2svn-tmp/git-*.dat | git fast-import

Et voilà ! Reste plus qu’à mettre les mains dans le cambouis, affaire à suivre (peut-être).

Tags: , , ,

Le seul mauvais choix est de ne pas en faire

Ils ont choisi Subversion. Et pourtant, ils connaissaient git. Mais ils ont quand même choisi Subversion. Personnellement, je ne connais pas SVN, mais je pratique git depuis longtemps. Je ne chercherai donc pas à alimenter la guerre stérile qui anime les défenseurs de chaque camp. Ha ! si, quand même, juste une chose : lors d’une coupure de courant, j’ai pu continuer de développer sur mon portable, organiser mes révisions, bref, travailler, quand tous les autres regrettaient que la machine à café ne soit pas sur réseau ondulé en attendant que l’électricité revienne. Les joies du mode déconnecté.

Je commence à bien connaître git ; une seule raison pourrait faire que je ne chercherai pas à l’utiliser d’emblée comme gestionnaire de version sur un projet : le degré d’intégration (de non intégration en fait) à la plateforme de développement. git étant totalement orienté « mode console », ils ont eu raison de choisir SVN pour leur nouveau projet multi-plateforme Windows / MacOS / GNU/Linux.

En ce qui me concerne, git-svn m’a ôté toute velléité d’apprendre à utiliser Subversion, puisque je peux bénéficier localement de toutes les qualités de git en m’interfaçant avec le dépôt central SVN. Par contre, j’ai pu observer leur manière d’utiliser Subversion. Et il en est une qui me choque.

"J'ai comme un goût dans la bouche après ma synchro partielle."

Il y a trop de doigts sur une main pour compter le nombre de participants à mon nouveau projet. Du coup, ambiance plateau de développement, agilité et compagnie. Logique. SVN a cette particularité de permettre de se réaligner partiellement sur la version de référence, ou ce qu’on veut en fait. Difficile d’ailleurs de savoir si c’est une fonctionnalité ou un pis-aller. Personnellement, j’imagine que se réaligner était tellement coûteux (est toujours, en fait), et la gestion des branches suffisamment calamiteuses, pour que les mecs de chez Apache se soient dit : « hé ! mais on devrait avoir le droit de ne récupérer que la nouvelle version des fichiers dont les défauts nous empêchent d’avancer ! » D’où, la synchronisation partielle.

Quand je vois la difficulté de mettre en place, tout comme le gain de temps énorme induit par une gestion correcte des dépendances dans une chaîne de compilation, je suis perplexe face à cette idée de synchronisation partielle. Cela revient quand même à dire que le développeur sait exactement ce dont il a besoin en terme de fichier source (et pas de version) pour corriger un problème auquel il est confronté. Moi, ça me scie. Encore, s’il s’agissait d’introduire localement les modifications issues d’un seul commit plutôt que tout ce qui l’a précédé ou ce qui peut le suivre, je dirais « pourquoi pas » (et c’est d’ailleurs sûrement possible avec SVN), si chaque version est un ensemble homogène et cohérent de modifications ayant trait à un unique sujet, etc. ça peut marcher. Mais non, ils vont piocher un fichier au pif (ou presque) et hop ! ils repartent à 300 km/h sur la piste du développement. Le Ministère de la Justice devrait s’employer à déployer cette technique expéditive, ça a l’air de faire des miracles.

De mon côté, je ne m’étonne plus de constater, lorsque je m’aligne, que le dépôt est vérolé. Ça me semble être la conséquence logique de cette idée de synchronisation partielle : on a (peut-être) testé notre modification dans un espace mal déterminé, on ne va pas recommencer sur l’état à jour. On est agiles ou pas ?

 

Tags: , , ,

Fedora – Déployer un dépôt git

ou comment j’ai déployé git avec mes ouatmille machines pour travailler tout seul sur mes projets.

Principe de fonctionnement

Vu que je suis le seul développeur, je vais à la fois être le développeur et l’intégrateur. Alors, on ne va pas s’embêter : un dépôt accessible en lecture écriture sur le serveur, et une foultitude de comptes autorisés.

Configuration du serveur

Comme l’explique très bien la documentation de git, deux protocoles de communication sont utilisés :

  • le protocole git:// pour les accès en lecture ;
  • le protocole ssh:// pour les accès en écriture.

La machine hôte de votre projet doit donc activer ces services, et autoriser les connections idoines. Ce qui revient à :

  • pour git:// : installer le paquet git-daemon, ouvrir le port 9418 et activer les services git et inetd dont il dépend ;
  • pour ssh:// : installer le paquet openssh-server, ouvrir le port 22 et activer le service sshd.

On va aussi créer un pseudo-utilisateur, qui hébergera les dépôts git sur son compte, qui, par un heureux hasard totalement fortuit, sera également le répertoire système tel que configuré dans /etc/xinet.d/git

# useradd -d /var/lib/git -N -M -s /usr/bin/git-shell git
# mkdir /var/lib/git/.ssh
# chown -R git /var/lib/git

Identification des participants

Chaque machine depuis laquelle je compte éditer le projet doit être identifiée (c’est surtout valable pour les accès en écriture). Le livre « Pro git » explique très bien comment générer une clef pour chaque participant.

host$ ssh-keygen
host$ scp ~/.ssh/id_rsa.pub server:/tmp/host.id_rsa.pub
server# cat /tmp/host.id_rsa.pub >> /var/lib/git/.ssh/authorized_keys

Initialisation du dépôt

Créons donc un projet, à partir de rien.

cd /var/lib/git
git init --bare MonProjet.git

Visibilité du dépôt

Le projet est donc accessible via deux URL :

  • git://server/MonProjet.git pour les accès publics en lecture uniquement (via git clone);
  • git@server:~/MonProjet.git pour les accès privés en lecture (toujours via git clone) et en écriture (via git push).

Tags: ,