Git à tous les étages
Niveau :
Résumé : git
Git est un système de suivi de version. Git est beau, git est simple, git a été fait par Linus Torvalds.
Tout seul
Dans une utilisation de premier niveau, git peut fonctionner comme RCS, c’est-à-dire en local.
Créons un dépôt local dans le répertoire que nous voulons versioniser :
$ git init
Fini !
Ajoutons un fichier au suivi des versions :
# add est récursif par défaut $ git add monfichier $ git commit -a
Bon je pense que vous avez compris, donc je vous la fais courte. Pour avoir la documentation d’une commande il suffit d’ajouter un tiret après git. Exemple le manuel de “git add” est dans “man git-add” ou dans “git add —help”. Voyons les commandes de base utilisées le plus fréquemment, vous y reconnaîtrez celles qu’on trouve dans la plupart des systèmes de suivi de version (CVS, RCS, SVN …) :
- git add : Ajouter un fichier au suivi de version
- git commit : Valider les modifications
- git log : Pour voir les modification récentes
- git diff : Voir ce qui a changé pour un fichier depuis une certaine version
- git revert : Annule une unique modification (il est possible d’annuler une modification passée sans annuler tout depuis ce moment)
- git status : Savoir tout ce qui n’a pas encore été validé
Vous remarquerez que git utilise des sommes sha1 pour identifier les différentes versions. Cela permet d’être universel et de ne pas avoir de problème de collision. Il vous faudra juste un peu de temps pour vous adapter à lire les logs avec des numéros aussi longs et non incrémentaux.
A plusieurs
Ensuite, un autre intérêt du suivi de version est aussi de travailler à plusieurs. Git est un système de version distribué, ce qui veut dire qu’il n’y a pas de dépôt centralisé qui fait autorité. Il y a autant de dépôt que de personne créant un dépôt et chacun peut aller piocher dans un ou plusieurs dépôts de ses voisins. C’est un peu anarchique, mais ça correspond bien au développement opensource. Et si vous voulez un dépôt d’autorité, vous pouvez toujours créer un dépôt que déclarez comme l’unique dépôt officiel et tout le monde doit se synchroniser dessus.
Un autre avantage de ce système est que chacun peut avoir ses propres commit fréquents pour suivre ce qu’il fait, et aggréger tous ces commits en une seule fois lorsque ce qu’il a fait fonctionne vraiment pour le valider sur un dépôt commun.
Voyons les commandes utiles :
- git clone : Créer un nouveau dépôt de travail basé sur un autre dépôt (public pour le partage)
- git pull : Récupère les nouveautés sur un dépôt parent
- git push : Déposer ses modifications sur un autre dépôt (public pour le partage)
Tags et branches
Bien sûr, comme dans tout bon système de suivi de version, git gère les tags et les branches.
- git branch : Pour gérer les branches
- git checkout : Change la branche de travail
- git show-branch : Affiche la branche en cours
- git merge : Pour merger des branches
- git tag : Gère les tags
Fin
Bien sûr je n’ai pas tout dit. Il existe plus de 100 commandes git, à vous de les découvrir si vous en avez besoin. Pensez à des choses bien sympathiques comme :
- git bisect : Parcourir tous les changements (avec recompilation et exécution si besoin) à la recherche de la source d’un problème (par recherche binaire)
- git rebase : Change le dépôt parent permettant de calculer les patchs
- git format-patch : Formate un mail pour envoyer un patch
- git am : Applique des patch directement en lisant une boîte mail
Et que dire des extensions comme git-svn qui permettent de s’interfacer avec la plupart des projets existant développés avec d’autres systèmes de suivi de version (ou ceux qui veulent utiliser git dans une entrprise qui ne jure que par svn).
Vous trouverez un peu plus de documentation sur l’usage courant de git sur http://www.kernel.org/pub/software/…. Une fiche de travail sur http://jonas.nitro.dk/git/quick-ref… et une fiche bien plus détaillée sur http://cheat.errtheblog.com/s/git
Commencez à vous y mettre, vous verrez que c’est rapidement pratique. D’ailleurs dès le prochain article je vais commencer des choses intéressantes avec git.