1 // -*- mode: doc; mode: visual-line; mode: flyspell; coding: utf-8; fill-column: 79; -*-
4 Plutôt que de plonger dans l'océan des commandes Git, utilisez ces commandes
5 élémentaires pour commencer en vous trempant les pieds. Malgré leur
6 simplicité, chacune d'elles est utile. En effet, lors de mon premier mois
7 d'utilisation de Git, je ne me suis jamais aventuré au-delà de ce qui est
8 exposé dans ce chapitre.
10 === Enregistrer l'état courant ===
12 Vous êtes sur le point d'effectuer une opération drastique ? Avant de le faire,
13 réalisez une capture de tous les fichiers du dossier courant :
17 $ git commit -m "Ma première sauvegarde"
19 Si jamais votre opération tourne mal, vous pouvez retrouver votre version
24 Pour enregistrer un nouvel état :
26 $ git commit -a -m "Une autre sauvegarde"
28 === Ajouter, supprimer, renommer ===
30 Les commandes ci-dessus ne font que garder traces des fichiers qui étaient
31 présents lorsque vous avez executé *git add* pour la première fois. Si vous
32 ajoutez de nouveaux fichiers ou sous-dossiers, il faut le signaler à Git :
34 $ git add readme.txt Documentation
36 De même, si vous voulez que Git oublie certains fichiers :
38 $ git rm kludge.h obsolete.c
39 $ git rm -r incriminating/evidence/
41 Git supprime les fichiers pour vous si vous ne l'avez pas encore fait.
43 Renommer un fichier revient à supprimer l'ancien nom et ajouter le nouveau. Il
44 y a également le raccourci *git mv* qui a la même syntaxe que la commande mv.
47 $ git mv bug.c feature.c
49 === Annuler/Reprendre avancé ===
51 Parfois vous voulez seulement revenir en arrière et oublier les modifications
52 effectuées depuis un certain temps parce qu'elles sont toutes fausses. Dans ce
57 vous montre une liste des commits récents, accompagnés de leur empreinte SHA1 :
59 ----------------------------------
60 commit 766f9881690d240ba334153047649b8b8f11c664
61 Author: Bob <bob@example.com>
62 Date: Tue Mar 14 01:59:26 2000 -0800
64 Remplacement de prinf() par write()
66 commit 82f5ea346a2e651544956a8653c0f58dc151275c
67 Author: Alice <alice@example.com>
68 Date: Thu Jan 1 00:00:00 1970 +0000
71 ----------------------------------
73 Les premiers caractères de l'empreinte sont suffisants pour spécifier un
74 commit ; ou alors, copiez et collez l'empreinte en entier. Saisissez :
76 $ git reset --hard 766f
78 pour restaurer l'état correspondant au commit donné et supprimer de manière
79 permanente tous les commits plus récents de l'enregistrement.
81 Parfois vous ne voulez faire qu'un bref saut dans un état précédent. Dans ce
86 Ceci vous ramène en arrière dans le temps, tout en conservant les commits
87 récents. Toutefois, comme pour le voyage temporel de la science-fiction, si
88 vous faites des modifications suivies d'un commit, vous entrerez dans une
89 réalité parallèle puisque vos actions sont différentes de ce qu'elles étaient
92 Cette réalité parallèle est appelée une 'branche' ('branch'), et <<branch,nous
93 en dirons plus après>>. Pour le moment rappelez-vous simplement que :
97 vous ramènera dans le présent. De plus, pour éviter que Git se plaigne,
98 réalisez toujours un commit ou un reset de vos modifications avant de faire un
101 Pour reprendre l'analogie du jeu vidéo :
103 - *`git reset --hard`* : recharge une ancienne sauvegarde et supprime toutes
104 les sauvegardes plus récentes.
106 - *`git checkout`* : recharge une ancienne partie, mais si vous jouez avec,
107 l'état de la partie va différer des enregistrement suivants que vous aviez
108 réalisés la première fois. Chaque nouvelle sauvegarde sera sur une branche
109 séparée représentant la réalité parallèle dans laquelle vous êtes
110 entré. <<branch,On s'en occupe plus loin>>.
112 Vous pouvez choisir de ne restaurer que certains fichiers et sous-dossiers en
113 les nommant à la suite de la commande :
115 $ git checkout 82f5 un.fichier un-autre.fichier
117 Faites attention car cette forme de *checkout* peut écraser vos fichiers sans
118 avertissement. Pour éviter les accidents, faites un commit avant toute commande
119 checkout, surtout quand vous débutez avec Git. En général, quand vous n'êtes
120 pas sûr des conséquences d'une opération, et pas seulement des commandes Git,
121 faites d'abord un *git commit -a*.
123 Vous n'aimez pas copier et coller les empreintes ? Alors utilisez :
125 $ git checkout :/"Ma première s"
127 pour arriver sur le commit qui commence avec ce message. Vous pouvez aussi
128 demander la cinquième sauvegarde en arrière :
130 $ git checkout master~5
132 === Reprise (revert) ===
134 Dans une cour de justice, certains évènements peuvent être effacés du procès
135 verbal. De même vous pouvez sélectionner des commits spécifiques à défaire :
140 défera le dernier commit ayant cette empreinte. La reprise est enregistrée
141 comme un nouveau commit, ce que vous pourrez constater en lançant un *git log*.
143 === Génération du journal des modifications (changelog) ===
145 Certains projets demandent un
146 http://en.wikipedia.org/wiki/Changelog[changelog]. Créez-le en tapant :
148 $ git log > ChangeLog
150 === Télécharger des fichiers ===
152 Faites une copie d'un projet géré par Git en saisissant :
154 $ git clone git://serveur/chemin/vers/les/fichiers
156 Par exemple, pour récupérer les fichiers utilisés pour créer ce site :
158 $ git clone git://git.or.cz/gitmagic.git
160 Nous aurons beaucoup à dire sur la commande *clone* d'ici peu.
162 === Le dernier cri ===
164 Si vous avez déjà téléchargé une copie d'un projet en utilisant *git clone*,
165 vous pouvez la mettre à jour vers la dernière version avec :
169 === Publication instantanée ===
171 Imaginez que vous avez écrit un script que vous voudriez partager avec
172 d'autres. Vous pourriez leur dire de le télécharger de votre ordinateur, mais
173 s'ils le font au moment où vous êtes en train d'améliorer le script ou d'y
174 effectuer des modifications expérimentales, ils peuvent se retrouver dans la
175 panade. Bien sûr, c'est pour cela qu'on a créé la publication de versions
176 successives. Les développeurs peuvent travailler sur un projet fréquemment,
177 mais ils ne rendent le code disponible quand lorsqu'ils le trouvent
180 Pour faire ça avec Git, dans le dossier qui contient votre script :
184 $ git commit -m "Première publication"
186 Ensuite vous pouvez dire à vos utilisateurs de lancer :
188 $ git clone votre.ordinateur:/chemin/vers/le/script
190 pour télécharger votre script. En considérant qu'ils ont accès à votre
191 ordinateur via ssh. Sinon, lancez *git daemon* et dites plutôt à vos
192 utilisateurs de lancer :
194 $ git clone git://votre.ordinateur/chemin/vers/le/script
196 À partir de maintenant, chaque fois que votre script est prêt à être publié,
199 $ git commit -a -m "Nouvelle version"
201 et vos utilisateurs peuvent mettre à jour leur version en allant dans leur
202 dossier contenant votre script et en saisissant :
206 Vos utilisateurs ne se retrouveront jamais avec une version de votre script que
207 vous ne vouliez pas leur montrer.
209 === Qu'ai-je fait ? ===
211 Retrouvez les modifications faites depuis le dernier commit avec :
217 $ git diff "@{yesterday}"
219 Ou entre une version spécifique et la version deux commits en arrière :
221 $ git diff 1b6d "master~2"
223 Dans chacun de ces cas, la sortie est un *patch* (rustine) qui peut être
224 appliqué en utilisant *git apply*. Vous pouvez aussi essayer :
226 $ git whatchanged --since="2 weeks ago"
228 Souvent je parcours plutôt l'historique avec
229 http://sourceforge.net/projects/qgit[qgit], pour sa pimpante interface
230 photogénique, ou http://jonas.nitro.dk/tig/[tig], une interface en mode texte
231 qui fonctionne même sur les connexions lentes. Autrement, installez un serveur
232 web, lancez *git instaweb* et dégainez n'importe quel navigateur internet.
237 Soit A, B, C, D quatre commits successifs où B est identique à A à l'exception
238 de quelques fichiers qui ont été supprimés. Nous voudrions remettre les
239 fichiers en D. Comment faire ?
241 Il y a au moins trois solutions. En considérant que nous sommes à D :
243 1. La différence entre A et B sont les fichiers supprimés. Nous pouvons créer
244 un patch représentant cette différence et l'appliquer :
246 $ git diff B A | git apply
248 2. Vu que nous avions enregistré les fichiers en A, nous pouvons les
251 $ git checkout A foo.c bar.h
253 3. Nous pouvons aussi voir le chemin de A à B comme une modification à
258 Quel est le meilleur choix ? Celui que vous préférez. C'est facile d'obtenir ce
259 que vous voulez avec Git, et souvent il y a plein de manières de le faire.
261 // LocalWords: doc visual-line Git git init add reset hard readme.txt rm mv log
262 // LocalWords: kludge.h obsolete.c incriminating evidence bug.c feature.c utf
263 // LocalWords: flyspell coding fill-column sous-dossiers commits SHA ba
264 // LocalWords: Author Mar prinf write ea dc Alice Thu checkout branch master
265 // LocalWords: un.fichier un-autre.fichier revert changelog Créez-le ChangeLog
266 // LocalWords: Télécharger téléchargé télécharger ssh daemon diff yesterday
267 // LocalWords: patch apply whatchanged since weeks ago qgit tig web instaweb
268 // LocalWords: foo.c bar.h