diff --git a/logiciels/git/index.tml b/logiciels/git/index.tml new file mode 100644 index 0000000..232f33e --- /dev/null +++ b/logiciels/git/index.tml @@ -0,0 +1,237 @@ + + + +
+Le logiciel git
est utilisé notamment par les développeurs
+du noyau Linux. Il s'agit d'un logiciel de contrôle de version, comme SVN,
+CVS, Arch ou encore Darcs, qui utilise des dépôts décentralisés. Il permet
+ainsi de travailler tout en gardant une trace des modifications apportées
+successivement, et de retrouver ainsi l'état antérieur de ses données.
Il permet également, comme beaucoup de ses congénères, de travailler à +plusieurs sur un même projet. Mais contrairement à CVS ou Subversion, par +exemple, Git ne fait pas de différence entre un dépôt principal et les +copies locales chez les différents contributeurs.
+ +Ce système permet également une organisation hiérarchisée de +gros projets, comme c'est le cas du noyau Linux, en rendant +complètement naturelle l'existence de dépôts alternatifs pour chaque +sous-projet, avec une granularité de modifications très fine, et à +plus grande échelle, une faible granularité du dépôt principal qui +reçoit périodiquement les modifications par paquets.
+ +À l'inverse, pour travailler à deux, git
évite le
+casse-tête des droits d'accès dans le dépôt de l'autre. On peut en
+effet travailler de manière totalement symétrique, chacun recopiant
+les modifications de l'autre : il suffit d'un accès en lecture aux
+fichiers de ses collaborateurs.
J'expliquerai ici comment se servir de la version 1.5 de
+git. Dans la version 1.4, par exemple, la commande git init
+est appelée git init-db
. Cette dernière, dans la version
+1.5, n'est qu'un autre nom pour git init
.
Pour créer un dépôt git
, il suffit de taper la commande
+suivante dans son répertoire de travail (que nous désignerons dans la
+suite par monsiteweb
).
git init+ +
Le dépôt est initialement vide. Imaginons que l'on souhaite
+suivre les modifications du fichier sommaire.html
qui se
+trouve dans le répertoire monsiteweb
.
git add sommaire.html +git commit+ +
La première indique à git notre modification : le fichier
+sommaire.html
existe et doit être pris en compte. Il n'est
+pas toujours pertinent de suivre les modifications de n'importe quel
+fichier. En particulier, lorsque des fichiers sont engendrés
+automatiquement à partir de fichiers source, ce sont les fichiers
+source et les générateurs qu'il est important de conserver. La
+commande git commit
sert à enregistrer dans le dépôt les
+modifications apportées.
Lors d'un check-in (avec la commande git
+commit
), git demande un texte de journal (commit
+log). Ce texte permet de repérer facilement les modifications
+effectuées par chaque commit, aussi bien pour les autres que pour
+soi-même. Chaque commit est identifié par un numéro unique,
+représenté comme une suite de chiffres hexadécimaux. Ce numéro sert
+de référence, par exemple, lors qu'on veut annuler une
+modification.
La commande git add
ajoute un fichier dans le dépôt. On
+peut également s'en servir pour des répertoires entiers. Les
+commandes suivantes permettent ainsi de créer et remplir un dépôt git
+dans un répertoire avec tout son contenu.
git init +git add * +git commit+ +
.git
du répertoire où il a été créé. Ce dépôt peut différer du
+contenu du répertoire proprement dit, si on a modifié les fichiers depuis
+le dernier commit ou si on a importé les modifications d'un autre
+contributeur. Noter que ce répertoire est souvent invisible dans les
+explorateurs de fichiers et dans la sortie de la commande ls
,
+puisque son nom commence par un point. Les dépôts git peuvent être
+compressés pour occuper moins de place (voir la commande git
+repack
et git gc
).On dispose d'une interface graphique (git-gui
) et d'une
+interface Web (gitweb) pour explorer agréablement un dépôt git.
Une autre manière de créer un dépôt git consiste à cloner un dépôt déjà
+existant. Si la dénommée Xanadu possède un dépôt git dans son répertoire
+/home/xanadu/these
, le dénommé Yoda peut l'aider en clonant
+son dépôt par la commande suivante
git clone /home/xanadu/these cible+ +
où cible
est le répertoire qui contiendra la copie. Yoda
+peut alors travailler librement dans le répertoire cible
comme
+sur n'importe quel dépôt git dont il est le propriétaire.
ssh://login@machine/home/xanadu/these
, si le
+répertoire se trouve sur une machine à laquelle on accède par
+ssh
. La plupart des projets de logiciels libres indiquent des
+adresses de la forme git://git.logiciel.org/trunk
ou encore
+http://git.logiciel.org/trunk
.Yoda effectue alors quelques opérations sur les fichiers. Il enregistre +régulièrement ses modifications dans le dépôt proprement dit en tapant
+ +git commit -a+ +
qui lui demande un texte de description pour le journal des +modifications.
+ +Si d'aventure Xanadu continuait de travailler sur son projet, Yoda peut +importer les dernières modifications en lançant la commande +
+ +git pull+ +
dans son dépôt. Quant à Xanadu, si elle veut bénéficier des
+modifications apportées par Yoda, se trouvant dans le répertoire
+/home/yoda/cible
, elle peut lancer la commande suivante chez
+elle.
git pull /home/yoda/cible+ +
Si Yoda pouvait accéder en écriture aux fichiers de Xanadu, il +pourrait également lui transmettre ses modifications par la commande +
+ +git push+ +
Entraînée par sa paresse naturelle, Xanadu aimerait facilement récupérer +les modifications de Yoda sans avoir à se rappeler le répertoire exact où +il les enregistre. Elle définit donc un raccourci de la manière +suivante
+ +git remote add yoda /home/yoda/cible+ +
La commande git remote show yoda
permet de consulter
+les informations sur le dépôt de Yoda, et git pull yoda
+permet de récupérer directement ses modifications. On peut également
+utiliser les commandes
git fetch yoda +git merge yoda/master+ +
Ici, master
est la branche du dépôt de Yoda
+que Xanadu souhaite utiliser. Un dépôt git peut comporter plusieurs
+branches correspondant à autant de directions différentes de
+développement. Ce système permet d'essayer diverses orientations, avant de
+retenir la meilleure. La commande git remote show
permet de
+voir la liste des branches d'un dépôt enregistré dans la liste des
+remotes
Contrairement à git, Subversion, dans un usage normal, ne clone pas
+entièrement le dépôt distant avec ses modifications successives, mais
+conserve seulement une copie de la dernière version. Il est possible
+d'utiliser le modèle de travail de git tout en interagissant avec un dépôt
+Subversion en utilisant le script git-svn
. Ceci permet, par
+exemple, de travailler facilement à plusieurs sur un sous-projet donné, en
+envoyant périodiquement le résultat du travail.
git-svn clone http://svn.site.org/svnroot/projet -T trunk -b branches -t tags+ +
La commande précédente permet d'importer la totalité d'un projet
+Subversion, avec ses différentes branches et tags (correpondant
+généralement aux différentes versions publiées). Attention, cela prend
+généralement beaucoup de place. Cependant, l'utilisation de
+git-gc
permet de compresser les données et réduit l'espace
+occupé à l'ordre de grandeur de la taille d'un checkout Subversion
+(mais ici on garde tout l'historique).
On peut alors travailler normalement sur son dépôt. Les +commandes
+git-svn rebase +git-svn dcommit+
permettent respectivement de recevoir et d'envoyer les modifications +apportées.
+ +Pour aspirer le contenu d'un dépôt CVS avec son historique et
+l'enregistrer sous forme de dépôt git, on dispose de la commande
+git-cvsimport
.
git-cvsimport -d:pserver:anonymous@cvs.truc.org:/sources projet+ +
On peut ajouter l'option -p -Z,3
pour
+activer la compression. Pour utiliser git-cvsimport
, il faut
+au préalable s'assurer de la présence du programme cvsps
sur
+son ordinateur.
Pour aspirer le contenu d'un dépôt Arch avec son historique et
+l'enregistrer sous forme de dépôt git, on dispose de la commande
+git-archimport
.
machine $ tla register-archive http://arch.foobar.org/archives/software +user@arch.foobar.org +machine $ tla my-default-archive user@arch.foobar.org +machine $ git-archimport software--devo--0:master+ +
L'utilisation de git-archimport
requiert la présence
+du client tla
qui est la façon la plus commune d'accéder aux
+dépôts GNU Arch.