Git

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Git
Image illustrative de l'article Git
Logo

Développeurs Junio Hamano
Linus Torvalds
et contributeurs
Première version 7 avril 2005
Dernière version 2.1.2 (30 septembre 2014) [+/-]
Écrit en C, Bourne shell, Perl
Environnements POSIX, Linux, OS X, Windows
Type Logiciel de gestion de versions
Licence Licence libre (GNU GPL v2)
Site web git-scm.com

Git est un logiciel de gestion de versions décentralisé. C'est un logiciel libre créé par Linus Torvalds, auteur du noyau Linux, et distribué selon les termes de la licence publique générale GNU version 2.

Particularités techniques[modifier | modifier le code]

Similaire en cela à BitKeeper, Git ne repose pas sur un serveur centralisé. C'est un outil de bas niveau, qui se veut simple et performant, dont la principale tâche est de gérer l'évolution du contenu d'une arborescence.

Git indexe les fichiers d'après leur somme de contrôle calculée avec la fonction de hachage SHA-1. Quand un fichier n'est pas modifié, la somme de contrôle ne change pas et le fichier n'est stocké qu'une seule fois. En revanche, si le fichier est modifié, les deux versions sont stockées sur le disque.

Git n'était pas, au départ, à proprement parler un logiciel de gestion de versions. Linus Torvalds expliquait que, « par bien des aspects, vous pouvez considérer Git comme un système de fichiers : il permet un adressage associatif, et possède la notion de versionnage, mais surtout, a été conçu en résolvant le problème du point de vue d'un spécialiste des systèmes de fichiers. Il n'y avait donc aucun intérêt à créer un système de gestion de version traditionnel. ». Il a aujourd'hui évolué pour intégrer toutes les fonctionnalités d'un gestionnaire de versions.

Git est considéré comme performant, au point que certains autres logiciels de gestion de version (Darcs, Arch), qui n'utilisent pas de base de données, se sont montrés intéressés par le système de stockage des fichiers de Git pour leur propre fonctionnement[1],[2]. Ils continuent toutefois à proposer des fonctionnalités plus évoluées.

Dès le début, Git a été pensé dans le but de fonctionner de façon décentralisée, c'est d'ailleurs l'une des clefs de son succès. La décentralisation de Git a aussi beaucoup apporté au développement des logiciels libres, puisque le besoin de demander un compte sur un dépôt SVN ou CVS centralisé devient obsolète. Il suffit de forker un projet ou de le cloner pour commencer à travailler dessus (avec tout l'historique du projet en local) et ensuite de proposer sa contribution (pull request) au repository principal (mainteneur principal du projet).

Les serveurs Git utilisent par défaut le port 9418 pour le protocole spécifique à Git. Les protocoles HTTP, HTTPS et SSH (et leurs ports standard) peuvent aussi être utilisés.

Fonctionnement[modifier | modifier le code]

Git possède deux structures de données : une base d'objets et un cache de répertoires. Il existe quatre types d'objets :

  • l'objet blob, qui représente le contenu d'un fichier (l'origine de cette dénomination est probablement à chercher dans les Binary Large OBjects des bases de données).
  • l'objet tree (mot anglais signifiant « arbre »), qui est une liste d'objets de type blobs et des informations associées à chaque blob, tel que le nom du fichier et les permissions. Cet objet décrit l'arborescence des sources à un instant donné.
  • l'objet commit, résultant de l'opération du même nom (mot anglais signifiant « valider une transaction »[3]) et qui donne accès à l'historique d'une arborescence de source. Il contient un message de log, un objet arbre et pointe vers un ou plusieurs objets commit parents.
  • l'objet tag (étiquette) qui est une manière de représenter un commit spécifique. Il est en général utilisé pour marquer certains commits, par exemple par un numéro ou un nom de version (2.1 ou bien Hardy Heron).


La base des objets peut contenir n'importe quel type d'objets. Une couche intermédiaire, utilisant des index (les sommes de contrôle), établit un lien entre les objets de la base et l'arborescence des fichiers.

Chaque objet est identifié par une somme de contrôle SHA-1 de son contenu. Git calcule la somme de contrôle et utilise cette valeur pour déterminer le nom de fichier de l'objet. L'objet est placé dans un répertoire dont le nom correspond aux deux premières lettres de la somme de contrôle. Le reste de la somme de contrôle constitue alors le nom du fichier pour cet objet.

Git enregistre chaque révision dans un fichier en tant qu'objet blob unique. Les relations entre les objets blobs sont déterminées en examinant les objets commit. En général, les objets blobs sont stockés dans leur intégralité en utilisant la compression de la zlib. Ce principe peut rapidement consommer une grande quantité de place disque ; de ce fait, les objets peuvent être combinés dans des archives, qui utilisent la compression différentielle (c'est-à-dire que les blobs sont enregistrés sous la forme de différences par rapport aux autres blobs).

Quelques commandes[modifier | modifier le code]

Git dispose notamment des commandes suivantes (pour une liste complète, consultez la page de manuel Git) :

  • git init crée un nouveau dépôt.
  • git clone clone un dépôt distant.
  • git add ajoute de nouveaux objets blobs dans la base des objets pour chaque fichier modifié depuis le dernier commit. Les objets précédents restent inchangés.
  • git commit intègre le haché d'un objet tree et les hachés des objets commits parents pour créer un nouvel objet commit.
  • git branch crée une nouvelle branche de développement.
  • git merge fusionne plusieurs branches de développement.

Interfaces[modifier | modifier le code]

Catalin Marinas maintient un script similaire à la commande Quilt, mais fonctionnant au-dessus de Git: Stacked GIT (ou StGit).

Une interface Web est fournie en standard avec Git :

  • gitweb: implémentée en Perl et maintenue par Kay Sievers.

ainsi que deux interfaces graphiques :

  • git-gui : outil permettant les opérations git courantes, implémenté en Tcl/Tk
  • gitk : est l'interface de visualisation détaillée et graphique d'un historique git

D'autres projets fournissent des interfaces pour git :

Développement[modifier | modifier le code]

Git a été spécialement développé et optimisé pour le noyau Linux. Linus Torvalds a débuté son écriture en avril 2005, pour remplacer le programme propriétaire BitKeeper. En effet, Larry McVoy a révoqué la possibilité d'utiliser gratuitement son logiciel, après qu'Andrew Tridgell eut tenté une rétro-ingénierie sur les protocoles utilisés par BitKeeper. Les raisons de cette révocation restent toutefois controversées.

La première version a été publiée le 7 avril 2005. Depuis, le développement de cet outil s'est poursuivi. Il a été progressivement amélioré, se voyant doté d'interfaces graphiques, d'interfaces Web ou de scripts évolués.

Le Kernel Summit de juillet 2005 a été l'occasion pour Linus Torvalds d'annoncer que les versions suivantes du noyau Linux (à partir de la version 2.6.12) seraient développées à l'aide de Git.

Fin juillet 2005, Linus Torvalds a décidé de confier la maintenance et les évolutions de Git à Junio Hamano, expliquant qu'il avait « toujours dit qu'il ne voulait pas vraiment le maintenir sur le long terme ».

Le développement est très actif. La parution de la première version stable (1.0) date du 21 décembre 2005, soit moins d'un an après le démarrage du projet.

Origine du nom[modifier | modifier le code]

Se prononce /ˈɡit/ avec un ɡ dur.[réf. souhaitée]

Le magazine PC World nous apprend que « quand on lui a demandé pourquoi il avait appelé son logiciel « git », qui est à peu près l'équivalent de « connard » en argot britannique[4],[5], Linus Torvalds a répondu « je ne suis qu'un sale égocentrique, donc j'appelle tous mes projets d'après ma propre personne. D'abord Linux, puis Git. » »[6].

Il est clair que le mot égocentrique est ironique quand on sait que Linus Torvalds ne voulait pas appeler Linux par son propre nom, mais le nommer « Freix » (un mélange de « free-Unix » et freak en anglais qui veut dire « bizarre »). Lorsqu'il a publié ses premiers essais sur un site public, l'administrateur du site n'aimait pas Freax et a préféré l'appeler Linux[7].

Notes et références[modifier | modifier le code]

  1. git Archives: using git directory cache code in darcs?
  2. [Gnu-arch-users] [ANNOUNCEMENT] /Arch/ embraces `git'
  3. http://gdt.oqlf.gouv.qc.ca/ficheOqlf.aspx?Id_Fiche=8371027#eng
  4. http://www.wordreference.com/enfr/git.
  5. Ou, d'après Merriam-Webster, personne inconséquente ou sans valeur. John Lennon utilise le mot dans sa chanson I'm So Tired.
  6. (en) PC World.
  7. (en) Ann Brashares, Linus Torvalds, Software Rebel, chap. 2 (« The Birth of Linux »), p. 27 « Originally he chose the name Freix (the -ix from Unix). It was meant to be sort of a silly pun. “But it turns out that the person who had the FTP site in Finland didn't like the 'Freix' part, so he just decided on Linux instead,” Torvalds remember. ». Autre source : [À COMPLÉTER].

Voir aussi[modifier | modifier le code]

Sur les autres projets Wikimedia :

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]