Git Attitude

La gestion de sources qui fait du bien

Installer un Git récent

| Commentaires

Vous aimez déjà Git, ou vous souhaitez le découvrir ? Vous allez participer à un Atelier Git Attitude ? Il vous faut alors installer une version récente sur votre poste de travail, et sans doute aussi sur vos machines de déploiement, de staging, etc. Cet article essaie de vous donner toutes les clés pour faire cela aussi rapidement et facilement que possible.

Récent… c’est-à-dire ?

À l’heure où j’écris ceci, la dernière version stable de Git est la 1.7.2.1. La plupart des systèmes pré-packagés sont encore sur la précédente, la 1.7.1.1 (qui est très récente aussi), mais ça va vite se mettre à jour…

Concrètement, les différences avec des versions plus anciennes (jusqu’à 1.5.0, qui a introduit les derniers changements en date de structure du dépôt) sont quelque peu mineures et focalisées sur des détails d’options et de raffinement dans les décorations des logs, l’exécution d’outils externes (on pense notamment aux outils de diff), quelques fonctionnalités de confort, etc.

En termes de compatibilité sur le dépôt et d’opérations courantes, tout Git au moins 1.5.0 saura manipuler un dépôt plus récent, par exemple (ce qui peut avoir son importance si, par exemple, vous déployez sur un hébergement mutualisé dont les versions seraient un peu rances).

Je vous recommande d’avoir au moins une 1.6.6, mais compiler le code source sur votre plate-forme reste la meilleure façon d’avoir une version à jour, optimisée pour votre situation et dotée de tout le dernier confort proposé, notamment pour les usages avancés.

Un mot sur la doc

Git est un outil extrêmement puissant et riche, avec ses quelque 75 commandes de haut niveau (dites « porcelain ») et près de 60 commandes de bas niveau, à usage surtout interne (dites « plumbing »). Même les commandes principales, utiles pratiquement au quotidien, qui sont à peu près 20, recèlent une puissance insoupçonnée ; à ce titre, leur documentation est un atout précieux.

En effet, je trouve que les auteurs et mainteneurs de Git ont fait un boulot exceptionnel sur la documentation des commandes, à laquelle on peut accéder soit en tapant git help COMMANDE soit, lorsqu’on a la commande man, avec un man git-COMMANDE (les deux sont équivalents mais je préfère personnellement la première syntaxe).

Cependant, les méthodes d’installation par source ou par paquets ne l’installeront pas toujours par défaut : il vous appartient d’installer les bons paquets auxiliaires (typiquement git-doc) ou d’appeler les bonnes commandes de compilation et d’installation. Nous y reviendrons.

Installer Git sur OSX

Sur OSX, je ne saurais trop vous recommander de passer par l’installeur binaire hébergé sur Google Code, le projet git-osx-installer. Il est calé (là tout de suite) sur la 1.7.2 et installe les docs au passage, donc aucune raison de se priver ! Tout est installé dans /usr/local/git par défaut.

C’est de loin l’option la plus simple : compiler à partir des sources sur OSX exige une kyrielle de pré-requis qui peuvent être pénibles à obtenir, qu’on passe par Macports, Fink, Homebrew ou d’autres voies…

Installer Git sur Linux

Approche 1 : utiliser des paquets

Il existe généralement plusieurs paquets se répartissant les fonctionnalités et documentations de Git, paquets aux noms raisonnablement explicites, typiquement git comme « paquet chapeau » (paquet virtuel entraînant l’installation des autres), git-core (la quasi-totalité des commandes), git-doc, git-gui, gitk et gitweb (interfaces graphiques et frontal web de navigation de dépôt), git-svn et git-cvs (passerelles avec d’autres SCM)…

Sur Ubuntu et ses dérivés, les paquets sont assez récents (1.7.0 sur Lucid Lynx à l’heure où j’écris ceci) ; il est toutefois possible d’avoir des versions très à jour en passant par un PPA (Personal Package Archive, dépôt Ubuntu officieux maintenu par une entité quelconque, un particulier par exemple), le plus connu dans le cas qui nous occupe étant celui d’Andrey Voronov, qui propose des paquets tout frais (donc 1.7.2) pour Ubuntu 8.04 (Hardy Heron) et 10.04 (Lucid Lynx). Si vous avez une 9.x, vous pouvez tester ces dépôts quand même, utiliser le paquet fourni (Git 1.6.0 en 9.04, Git 1.6.3 en 9.10) ou compiler la source.

Debian dispose de paquets raisonnablement récents, avec la 1.7.1 (si vous êtes en stable/lenny, vous aurez cependant besoin des dépôts « backports »).

Pour les distributions basées RPM, telles que Red Hat, SuSE et Mandriva, le site officiel de Git maintient des paquets RPM très à jour. Gentoo a un paquet dev-vcs/git en unstable, et comme c’est Gentoo, on est basés sur sources donc assez récent (1.7.2 semble-t-il). ArchLinux est, comme souvent, très à jour avec un paquet git en 1.7.2.1 qui n’a que peu de dépendances.

Enfin, sachez qu’on peut avoir un Git récent sur Solaris en passant par Sun Freeware.

Approche 2 : compiler le code source

Commencez par récupérer l’archive du code source complet (préfixe git-) au format de votre choix. Par exemple pour la 1.7.2.1, l’une des deux suivantes :

D’une distribution à l’autre, les dépendances ne seront pas toujours les mêmes. Bon, vous allez faire une compil’, il vous faut donc naturellement build-essential, le paquet universel des distributions Linux pour pouvoir compiler des trucs. Je sais aussi qu’il vous faut généralement au moins Curl, Perl et Expat, mais si vous voulez les docs (et vous les voulez, faites-moi confiance…) vous aurez sans doute aussi besoin des paquets pour TCL/TK, xmlto et AsciiDoc. Sur une Debian/Ubuntu, ça donne une installation de paquets qui va durer un petit moment :

1
apt-get install -q -y build-essential libcurl4-openssl-dev curl perl expat tk asciidoc docbook2x xmlto

Allez donc prendre un café… Quand ce sera fini, c’est en revanche enfantin. Décompressez votre archive quelque part (par exemple dans /tmp/sources), allez dans le répertoire ainsi créé, puis :

1
2
3
4
5
6
$ ./configure

$ make all man

$ sudo make install install-man

La clé ici est de bien penser à préciser les cibles man à la compilation (par défaut on n’a que all) et install-man ensuite. Si vous aimez utiliser l’outil de consultations de docs info, vous pouvez ajouter les cibles info et install-info, respectivement.

Une petite vérif’ ?

1
2
$ git --version
git version 1.7.2.1

Bravo !

Installer Git sur Windows

Bon, déjà, soyons clair : ça sera largement moins bien que sur Linux ou OSX. Vous n’aurez pas les docs (pas de façon intégrée en tout cas), l’accès en ligne de commande (donc à toutes les commandes) n’est pas 100% automatique, et j’en passe. Mais bon.

Règle numéro 1 : tu ne te baseras par sur Cygwin. Car tu n’as pas une heure à perdre par commande, et la sous-couche Cygwin est horriblement lente en générale, et pour Git en particulier. Ouste !

Cela nous laisse les optionss suivantes :

  • msysgit (également appelé « Git for Windows »). Cet outil propose un installeur exécutable hébergé sur Google Code, qui est assez bien maintenu (il est actuellement en 1.7.1). Il propose une interface graphique pour les opérations usuelles.
  • SmartGit. C’est un enrobage Java, donc multi-plateformes en fait, autour de Git. On le trouve chez Syntevo, qui nous a déjà filé SmartSVN. Ça fournit une interface graphique pour les non-experts, notamment les non-développeurs, mais on n’y trouve, fatalement, aucune commande avancée. Pratique par exemple si vous voulez que vos graphistes / designers versionnent leurs fichiers au même titre que les développeurs. La version actuelle est la 1.5.4, je ne sais pas à quel Git ça correspond mais elle est sortie à peu près au moment de Git 1.7.1.1…

Complétion et prompt

Git fournit, dans son archive de code source (sa tarball), un script de complétion Bash tout simplement génial.

Il permet de compléter les commandes en profondeur (commandes, sous-commandes, arguments appropriés, y compris pour les aliases configurés dans Git), et fournit de surcroît la fonction de personnalisation avancée du prompt que j’avais déjà présentée dans Le prompt Bash qui change la vie avec Git (inutile donc de le garder dans votre fichier d’initialisation, ça ferait doublon pour rien).

D’ailleurs sa version ne cesse de s’améliorer (on a désormais une variable qui indique dans le prompt si on est en avance ou en retard par rapport à l’upstream, par exemple, et l’initialisation—qui a lieu la première fois d’une session qu’on arrive dans un dépôt—est de plus en plus rapide).

Que du bonheur ! Si vous ne voulez pas vous galérer à récupérer l’archive, la décompresser et piocher le bon fichier, faites donc juste la commande qui suit :

1
curl https://github.com/git/git/raw/master/contrib/completion/git-completion.bash -o ~/.git-completion

Ensuite, dans votre .bashrc (Linux) ou .profile (OSX), retirez si besoin vos fonctions de prompt existantes, et terminez en chargeant le script de complétion Git et en personnalisant votre prompt (ici avec plein de jolies couleurs) :

1
2
3
source ~/.git-completion
export GIT_PS1_SHOWDIRTYSTATE=1 GIT_PS1_SHOWSTASHSTATE=1 GIT_PS1_SHOWUNTRACKEDFILES=1
export PS1='\[\033[35m\u@\h:\033[36m\W\[\033[0m\033[33m$(__git_ps1 " (%s)")\033[0m\$ '

Démonstration :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
tdd@CodeMagic:~$ cd /tmp
tdd@CodeMagic:tmp$ git clone git://github.com/tdd/sprockets-rails.git
tdd@CodeMagic:tmp$ cd sprockets-rails
tdd@CodeMagic:sprockets-rails (master)$ echo 'toto' > toto
tdd@CodeMagic:sprockets-rails (master %)$ git add toto
tdd@CodeMagic:sprockets-rails (master +)$ echo 'tutu' >> toto
tdd@CodeMagic:sprockets-rails (master *+)$ git stash
tdd@CodeMagic:sprockets-rails (master $)$ git stash pop
tdd@CodeMagic:sprockets-rails (master *)$ git reset --hard HEAD
tdd@CodeMagic:sprockets-rails (master)$ git <TAB><TAB>
add                 commit              instaweb            revert
am                  config              lg                  rm
annotate            describe            log                 send-email
apply               diff                merge               shortlog
archive             difftool            mergetool           show
bisect              fetch               mv                  show-branch
blame               filter-branch       name-rev            st
branch              format-patch        notes               stage
bundle              fp                  pull                stash
checkout            fsck                push                status
cherry              gc                  rebase              submodule
cherry-pick         get-tar-commit-id   relink              svn
ci                  grep                remote              tag
citool              gui                 repack              whatchanged
clean               help                replace
clone               imap-send           request-pull
co                  init                reset
tdd@CodeMagic:sprockets-rails (master)$ git merge <TAB><TAB>
HEAD            master          origin/HEAD     origin/master
tdd@CodeMagic:sprockets-rails (master)$ git merge origin/master --<TAB><TAB>
--commit      --ff-only     --no-commit   --no-log      --no-stat     --stat
--ff          --log         --no-ff       --no-squash   --squash      --strategy

Whoooohooooo !

Conclusion

Comme vous pouvez le voir, installer un Git récent n’a rien de sorcier, et disposer d’un Git complet, avec documentation intégrée, et doté d’une complétion et d’un prompt idoines, change tout simplement la vie… Alors bonne gestion de versions !

Commentaires

Ils nous font confiance : Kelkoo, MisterGoodDeal, PriceMinister, Blablacar / Comuto, Sarenza, Voyages-SNCF, LeMonde.fr, Fnac DIRECT, 20minutes, Orange, l’OCDE, Cisco, Alcatel-Lucent, Dassault Systèmes, EADS, Atos, Lagardère Interactive, Lesieur, L’Occitane en Provence, Météo France, 4D, Securitas, Digitas, Vivaki, Fullsix, Ekino, TBWA \ Paris, Valtech, Is Cool Entertainment, Open Wide…