Movatterモバイル変換


[0]ホーム

URL:


Aller au contenu
Wikipédial'encyclopédie libre
Rechercher

Git

Un article de Wikipédia, l'encyclopédie libre.
Page d’aide sur l’homonymie

Pour les articles homonymes, voirGit.

Git
Description de l'image Git-logo.svg.
Description de l'image Git session.svg.
Informations
CréateurLinus TorvaldsVoir et modifier les données sur Wikidata
Développé parSoftware 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 version2.49.0 ()[2]Voir et modifier les données sur Wikidata
Dépôtgit.kernel.org/pub/scm/git/git.gitVoir et modifier les données sur Wikidata
Assurance qualitéIntégration continue etintégration continueVoir et modifier les données sur Wikidata
Écrit enC,Perl,Tcl,Python etC++Voir et modifier les données sur Wikidata
Système d'exploitationMultiplateforme(en)Voir et modifier les données sur Wikidata
Formats lusGit packfile(d), git packfile index, version 1(d) et git packfile index, version 2(d)Voir et modifier les données sur Wikidata
Formats écritsGit packfile(d), git packfile index, version 1(d) et git packfile index, version 2(d)Voir et modifier les données sur Wikidata
LanguesAnglais,bulgare,catalan,français,indonésien,suédois,turc,ukrainien,vietnamien,chinois simplifié etmandarin de TaïwanVoir et modifier les données sur Wikidata
TypeGestionnaire de code source décentralisé(en)
Outil de science ouverte(d)
Outil de programmation(en)
Filestore(d)Voir et modifier les données sur Wikidata
LicenceLicence publique générale GNU version 2Voir et modifier les données sur Wikidata
Site webgit-scm.comVoir et modifier les données sur Wikidata

modifier -modifier le code -voir Wikidata(aide)

Git est unlogiciel de gestion de versionsdécentralisé. C'est unlogiciel libre et gratuit, créé en 2005 parLinus Torvalds, auteur dunoyau Linux, et distribué selon les termes de lalicence publique générale GNU version 2. Le principal contributeur actuel de Git, et ce depuis plus de 16 ans, estJunio C Hamano.

Depuis les années 2010, il s’agit dulogiciel de gestion de versions le plus populaire dans le développement logiciel et web, qui est utilisé par des dizaines de millions de personnes, sur tous les environnements (Windows, Mac, Linux)[3]. Git est aussi le système à la base du célèbre site webGitHub, le plus important hébergeur de code informatique.

Origine du nom

[modifier |modifier le code]

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

« Git » peut se traduire par « connard » en argot britannique[5],[6] ou désigne, d'aprèsMerriam-Webster, une personne inconséquente ou sans valeur. Linus Torvalds explique à ce sujet« je ne suis qu'un sale égocentrique, donc j'appelle tous mes projets d'après ma propre personne. D'abord Linux, puis Git »[7].

Développement

[modifier |modifier le code]

Git a été spécialement développé et optimisé pour le noyauLinux.Linus Torvalds a commencé son écriture enavril 2005, pour remplacer le programme propriétaireBitKeeper. En effet,Larry McVoy a révoqué la possibilité d'utiliser gratuitement son logiciel, après qu'Andrew Tridgell eut tenté uneré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. 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 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, 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, soit moins d'un an après le démarrage du projet.

Pour des raisons de sécurité, des travaux pour passer l’algorithme dehashage deSHA-1, considéré plus assez sécurisé, àSHA-256 sont en préparations[8],[9].

Particularités techniques

[modifier |modifier le code]

Git est similaire àBitKeeper en cela qu'il ne repose pas sur unserveur centralisé, mais utilise un système de connexionpair à 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, qui se veut simple et performant, dont la principale tâche est de gérer l'évolution du contenu d'unearborescence.

Git indexe les fichiers d'après leursomme de contrôle calculée avec lafonction de hachageSHA‑1. Quand unfichier 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 delogiciel 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 simplesystème de fichiers. Il est adressé par contenu, et possède la notion de versionnement, 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. »[10] 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 debase de données, se sont montrés intéressés par le système de stockage des fichiers de Git pour leur propre fonctionnement[11],[12]. 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. La décentralisation de Git a beaucoup apporté au développement des logiciels libres, puisque le besoin de demander un compte sur un dépôtSVN ouCVS centralisé devient obsolète. Il suffit deforker un projet ou de lecloner 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 leport 9418 pour leprotocole spécifique à Git. Les protocolesHTTP,HTTPS etSSH (et leursports standards) peuvent aussi être utilisés.

Fonctionnement

[modifier |modifier le code]

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

  • l'objetblob (pourbinary large object désignant un ensemble de données brutes[13]), qui représente le contenu d'unfichier  ;
  • l'objettree (mot anglais signifiant arbre), qui décrit une arborescence de fichiers. Il est constitué d'une liste d'objets de typeblobs et des informations qui leur sont associées, tel que le nom du fichier et lespermissions. Il peut contenirrécursivement d'autrestrees pour représenter les sous-répertoires ;
  • l'objetcommit (résultat de l'opération du même nom signifiant « valider une transaction »[14]), 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 objetscommit parents pour former un graphe d'historiques[13] ;
  • l'objettag (é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 bienLucid Lynx).

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ôleSHA-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 premiers caractères 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'objetblob unique. Les relations entre les objetsblobs sont déterminées en examinant les objetscommit. En général, les objetsblobs sont stockés dans leur intégralité en utilisant la compression de lazlib. 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 lesblobs sont enregistrés sous la forme de différences par rapport aux autresblobs).

Quelques commandes

[modifier |modifier le code]
Les commandes permettent de gérer le flot de données et les niveaux d'enregistrement dans le système de contrôle de révision de Git, par exemple, le checkout et le pull permettent de récupérer les données; le commit de les envoyer.

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 objetsblobs dans la base des objets pour chaque fichier modifié depuis le derniercommit. Les objets précédents restent inchangés ;
  • git commit intègre la somme de contrôleSHA-1 d'un objettree et les sommes de contrôle des objetscommits parents pour créer un nouvel objetcommit ;
  • git branch pour la gestion des branches ;
  • git merge fusionne une branche dans une autre ;
  • git rebase déplace les commits de la branche courante devant les nouveaux commits d’une autre branche ;
  • git log affiche la liste des commits effectués sur une branche ;
  • git push publie les nouvelles révisions sur leremote. (La commande prend différents paramètres) ;
  • git pull récupère les dernières modifications distantes du projet (depuis leRemote) et les fusionne dans la branche courante ;
  • git stash stocke de côté un état non commité afin d’effectuer d’autres tâches ;
  • git checkout annule les modifications effectuées, déplacement sur une référence (branche, hash) ;
  • git switch changement de branche ;
  • git revert défait les modifications d'un commit précédent ;
  • git remote gestion des remotes.

Interfaces

[modifier |modifier le code]

Interfaces native

[modifier |modifier le code]

En tant qu'outil Open source, git est nativement doté d'une interface portable standard en ligne de commande pouvant fonctionner depuis divers types de terminaux.

Exemple d'une session de création d'un dépôt git.
L'exemple illustre l'utilisation d'une séquence de commandes :
  1. git init : création d'un dépôt git ;
  2. cat : création d'un fichier README en utilisant une commande Unix ;
  3. git add README : ajout du fichier README dans la liste des fichiers à prendre en compte ;
  4. git commit : enregistrement dans le dépôt local de contenu de fichier ;
  5. git push -u origin master : envoi des éléments pour synchronisation de la branche (master) sur un dépôt distant (origin).

Interfaces graphique native

[modifier |modifier le code]

En complément de l'interface native en ligne de commande, deux interfaces graphiques sont disponibles.


Uneinterface web est fournie en standard avec Git :

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

Deux interfaces graphiques sont proposées :

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

Interfaces de bureau tierces

[modifier |modifier le code]
L'interface graphiquegitg utiliseGTK+. Sur la photo apparaissent deux branches, une en jaune, une en pourpre; la branche violette est fusionnée dans la branche jaune.

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

  • qgit propose des outils supplémentaires par rapport àgitk ;
  • Giggle est une interface enGTK+ ;
  • GitExtensions est un client Git graphique tournant sous Windows ;
  • gitg est uneinterface graphique libre enGTK+, écrite enVala ;
  • JGit/EGit est une interface écrite enJava, puis une extension Git pourEclipse ;
  • SourceTree est unlogiciel propriétaire gratuit compatible Windows et OS X édité parAtlassian permettant de gérer des dépôts Git etMercurial (commit, merge, fetch, push…) ;
  • GitKraken est un logiciel propriétaire permettant de gérer des dépôts Git ;
  • Sublime Merge : permet de lire un dépôt git afin d'afficher le différentiel des dernières modifications, la liste des soumissions (commits) et les branches, parmi d'autres choses () ;
  • 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 deTortoiseSVN ;
  • 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… :

Sites d’hébergement

[modifier |modifier le code]

Il existe différents sites (également appeléesforges) 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 deFreedesktop.org,GNOME,KDE ou encore deBlender.

Notes et références

[modifier |modifier le code]
  1. « Re: Trivia: When did git self-host? »(consulté le)
  2. Junio Hamano(en), « [ANNOUNCE] Git v2.49.0 »,(consulté le)
  3. (en) « Git 2.8.2 Popular Source Code Management System Released with Over 18 Bug Fixes », surSoftpedia,(consulté le)
  4. (en) « Tech Talk: Linus Torvalds on git », surYouTube,(consulté le).
  5. « Git », surWordReference.com(consulté le).
  6. Julien Lausson, « Au fait, pourquoi GitHub s’appelle GitHub ? », surNumerama,
  7. (en) Robert McMillan, « After controversy, Torvalds begins work on "git" », surPC World,.
  8. (en) Jonathan Corbet, « Whatever happened to SHA-256 support in Git? », surLWN.net,(consulté le)
  9. (en) Michael Larabel, « Git 2.45 Begins Landing Code For SHA1 & SHA256 Interoperability For Repositories », surPhoronix,(consulté le)
  10. (en) Linus Torvalds, « 'Re: more git updates..' »,(consulté le)« 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 afilesystem person (hey, kernels is what I do), and I actually have absolutelyzero interest in creating a traditional SCM system. »
  11. git Archives: using git directory cache code in darcs?.
  12. [Gnu-arch-users] [ANNOUNCEMENT] /Arch/ embraces `git'.
  13. a etb(en) Jon Loeliger,Version Control with Git,O'Reilly Media, Basic Git Concepts
  14. « Validation », surgouv.qc.ca(consulté le).
  15. (en) « Apache Allura », surApache Allura(consulté le)
  16. (en) « Allura »
  17. ab etc(en) James Sanders, « If Microsoft buying GitHub freaks you out, here are your best alternatives », surTechRepublic,
  18. « Bonobo Git Server - Git Server for Windows », surbonobogitserver.com(consulté le)
  19. AWS CodeCommit
  20. « Gitea », surGitea.io(consulté le).
  21. « Kallithea », surScm.org(consulté le).

Voir aussi

[modifier |modifier le code]

Sur les autres projets Wikimedia :

  • Git, surWikimedia Commons
  • Git,surWikibooks

Articles connexes

[modifier |modifier le code]

Liens externes

[modifier |modifier le code]
v ·m
Libres
Gestion locale
Client-serveur
  • CVS (1990)
  • CVSNT (1992)
  • SVN (2000)
Décentralisé
Propriétaires
Gestion locale
Client-serveur
Décentralisé
Concepts
v ·m
Officiel
Non-officiel
Ce document provient de « https://fr.wikipedia.org/w/index.php?title=Git&oldid=221906037 ».
Catégories :
Catégories cachées :

[8]ページ先頭

©2009-2025 Movatter.jp