git

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Git (logiciel))
Sauter à la navigation Sauter à la recherche
git
Description de l'image Git-logo.svg.

Description de l'image Gitweb.png.
Informations
Développé par Software Freedom Conservancy (en)Voir et modifier les données sur Wikidata
Première version [1]Voir et modifier les données sur Wikidata
Dernière version 2.18.0 ()[2]Voir et modifier les données sur Wikidata
Dépôt git.kernel.org/pub/scm/git/git.gitVoir et modifier les données sur Wikidata
Écrit en C, Shell Unix, Perl, Tcl et GNU BashVoir et modifier les données sur Wikidata
Environnement MultiplateformeVoir et modifier les données sur Wikidata
Langues AnglaisVoir et modifier les données sur Wikidata
Type Gestionnaire de code source décentralisé (en)Voir et modifier les données sur Wikidata
Licence GPLv2Voir et modifier les données sur Wikidata
Site web git-scm.comVoir et modifier les données sur Wikidata

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. En 2016, il s’agit du logiciel de gestion de versions le plus populaire qui est utilisé par plus de douze millions de personnes[3].

Particularités techniques[modifier | modifier le code]

Similaire en cela à BitKeeper, Git ne repose pas sur un serveur centralisé, mais il utilise un système de connexion pair à pair. Le code informatique développé est stocké non seulement sur l’ordinateur de chaque contributeur du projet, mais il peut également l'être sur un serveur dédié. C'est un outil de bas niveau[réf. souhaitée], 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.

Contrastant avec les architectures de logiciel de gestion de versions habituellement utilisées jusqu'alors, Git repose entièrement sur un petit nombre de structures de données élémentaires. Linus Torvalds expliquait ainsi : « Par bien des aspects, vous pouvez considérer git comme un simple système de fichiers. Il est adressé par contenu, et possède la notion de versionnage, mais je l'ai vraiment conçu en prenant le point de vue d'un spécialiste des systèmes de fichiers (après tout, j'ai l'habitude de travailler sur des noyaux) et je n'avais absolument aucune envie de créer un système de gestion de version traditionnel. »[4] Les premières versions de Git offraient une interface rudimentaire pour manipuler ces objets internes avant que les fonctionnalités courantes de gestion de version ne soient ensuite progressivement ajoutées et raffinées.

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[5],[6]. 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[réf. souhaitée]. 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 dépôt 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 standards) 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 cinq types d'objets :

  • l'objet blob (pour Binary Large OBject désignant un ensemble de données brutes[7]), qui représente le contenu d'un fichier  ;
  • l'objet tree (mot anglais signifiant « arbre »), qui décrit une arborescence de fichier. Il est constitué d'une liste d'objets de type blobs et des informations qui leur sont associées, tel que le nom du fichier et les permissions. Il peut contenir récursivement d'autres trees pour représenter les sous-répertoires ;
  • l'objet commit (résultat de l'opération du même nom signifiant « valider une transaction »[8]), qui correspond à une arborescence de fichiers (tree) enrichie de métadonnées comme un message de description, le nom de l'auteur, etc. Il pointe également vers un ou plusieurs objets commit parents pour former un graphe d'historiques[7] ;
  • l'objet tag (étiquette) qui est une manière de nommer arbitrairement un commit spécifique pour l'identifier plus facilement. 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 Lucid Lynx).
  • l'objet branch (branche) qui contient une partie de l'avancement du projet. Les branches sont souvent utilisées pour avancer dans une partie du projet sans impacter une autre partie.

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 :

  • 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 la somme de contrôle SHA-1 d'un objet tree et les sommes de contrôle des objets commits parents pour créer un nouvel objet commit ;
  • git branch​ liste les branches ;
  • git merge​ fusionne une branche dans une autre ;
  • git log​ affiche la liste des commits effectués sur une branche ;
  • git push​ publie les nouvelles révisions sur le remote. (La commande prend différents paramètres) ;
  • git pull​ récupère les dernières modifications distantes du projet (depuis le Remote) et les fusionner dans la branche courante ;
  • git stash​ stocke de côté un état non commité afin d’effectuer d’autres tâches.

Interfaces[modifier | modifier le code]

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.

Interfaces de bureau tierces[modifier | modifier le code]

Il existe également d'autres application offrant une interface de bureau :

  • qgit propose des outils supplémentaires par rapport à gitk ;
  • Giggle est une interface en GTK+ ;
  • GitExtensions est un client Git graphique tournant sous Windows ;
  • JGit/EGit est une interface écrite en Java, puis une extension Git pour Eclipse ;
  • SourceTree est un logiciel gratuit compatible Windows et OS X édité par Atlassian permettant de gérer des dépôts Git et Mercurial (commit, merge, fetch, push…) ;
  • tig est une interface texte libre (GPLv2), écrite en C ;
  • TortoiseGit logiciel libre sous licence GPLv2, écrit en C/C++, reprend les éléments d'interface de TortoiseSVN ;
  • Tower est un logiciel payant, uniquement pour OS X permettant la gestion de dépôts Git

Forges web pour auto-hébergement[modifier | modifier le code]

D'autres projets fournissent des interfaces web pour Git avec parfois gestion de différents projets, tickets, wiki, , etc. :

  • Allura de la fondation Apache, sous licence libre Apache 2.0[9], notamment utilisé par Sourceforge[10] ;
  • cgit, interface web libre (GPLv2) en C, écrite et utilisée par les auteurs du noyau Linux et de git et différents importants projets libres (KDE, tandis-que Gnome et Freedesktop.org l'on utilisé avant de passer à une instance de Gitlab auto-hebérgée) ;
  • Gerrit, interface web libre en Java ;
  • Gitalist est une interface web ;
  • Gitblit est une interface web pour administrer et visualiser des dépôts Git ;
  • GitBucket[10] ;
  • Gitea une interface web sous licence MIT, écrite en langage Go[11] ;
  • GitLab interface web avec gestion de groupes et tickets, développé en Ruby ;
  • Gitorious, ancien projet communautaire libre, fermé et intégré a GitLab ;
  • GitStack permet d'installer et d'administrer un serveur Git sur une plateforme Windows, implémenté en Python ;
  • Gogs forge libre (licence MIT) complète, développé en Go ;
  • Kallithea interface web libre (GPLv3) en python pour Mercurial et Git[12]
  • Phabricator, forge libre (licence Apache v2), en php, pour SVN, Git et Mercurial ;
  • RhodeCode, forge libre (version community, différentes licences libres, et Entreprise payante) ;
  • GNU Savannah, forge libre, servant a hébergee site homonyme, gère SVN, Mercurial et Git ;

.

Sites d’hébergement[modifier | modifier le code]

Il existe différents sites (également appelées forges) généralistes d'hébergement, ainsi que des sites dédiés à des développements en particulier, acceptant des projets liés d'utilisateur, comme l'instance cgit de Kernel.org (noyau Linux) ou les instances Gitlab de Freedesktop.org, Gnome, KDE ou Freedesktop.org, ou encore de Blender.

  • Framagit, site communautaire associatif libre de Framasoft, basé sur Gitlab.
  • GitHub est un service web d'hébergement et de gestion de développement de logiciels développé en Ruby on Rails et Erlang, appartient à Microsoft depuis juin 2018 ;
  • GitLab.com équivalent à GitHub et développé en Ruby, évolution du code du service Gitorious, racheté en mars 2015, le code source est disponible et utilisé par différentes autres forges ;
  • GNU Savannah, permettant également l'utilisation de Mercurial, dépôt officiel de la Free Software Foundation ;
  • SourceForge.net, probablement le plus ancien, ouvert en 1999, il utilisait CVS à ses début, avant de passer à Subversion (SVN), puis récemment à git également. Il utilise aujourd'hui Apache Allura[10].

Développement[modifier | modifier le code]

Git a été spécialement développé et optimisé pour le noyau Linux. Linus Torvalds a commencé 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]

Linus Torvalds prononce [ˈɡɪt] avec un ɡ dur[13].

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[14],[15], 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.”[16] ».

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

  1. https://www.kernel.org/pub/software/scm/git/
  2. (en) « [ANNOUNCE] Git v2.18.0 » (consulté le 21 juin 2018)
  3. (en) « Git 2.8.2 Popular Source Code Management System Released with Over 18 Bug Fixes », sur Softpedia, (consulté le 2 mai 2016)
  4. (en) Linus Torvalds, « 'Re: more git updates..' », (consulté le 24 avril 2017) « In many ways you can just see git as a filesystem - it's content-addressable, and it has a notion of versioning, but I really really designed it coming at the problem from the viewpoint of a filesystem person (hey, kernels is what I do), and I actually have absolutely zero interest in creating a traditional SCM system. »
  5. git Archives: using git directory cache code in darcs?.
  6. [Gnu-arch-users] [ANNOUNCEMENT] /Arch/ embraces `git'.
  7. a et b (en) Jon Loeliger, Version Control with Git, O'Reilly Media, Basic Git Concepts
  8. http://gdt.oqlf.gouv.qc.ca/ficheOqlf.aspx?Id_Fiche=8371027#eng.
  9. (en) « Allura »
  10. a, b et c (en) James Sanders, « If Microsoft buying GitHub freaks you out, here are your best alternatives », sur TechRepublic,
  11. https://gitea.io
  12. https://kallithea-scm.org
  13. (en) « Tech Talk: Linus Torvalds on git », sur YouTube, (consulté le 2 décembre 2016)
  14. http://www.wordreference.com/enfr/git.
  15. Ou, d'après Merriam-Webster, personne inconséquente ou sans valeur. John Lennon utilise le mot dans sa chanson I'm So Tired.
  16. (en) PC World.

Annexes[modifier | modifier le code]

Sur les autres projets Wikimedia :

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]