-
1. DĂ©marrage rapide
-
2. Les bases de Git
-
3. Les branches avec Git
-
4. Git sur le serveur
- 4.1 Protocoles
- 4.2 Installation de Git sur un serveur
- 4.3 Génération des clés publiques SSH
- 4.4 Mise en place du serveur
- 4.5 DĂ©mon (Daemon) Git
- 4.6 HTTP intelligent
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git hébergé
- 4.10 Résumé
-
5. Git distribué
-
6. GitHub
-
7. Utilitaires Git
- 7.1 SĂ©lection des versions
- 7.2 Indexation interactive
- 7.3 Remisage et nettoyage
- 7.4 Signer votre travail
- 7.5 Recherche
- 7.6 RĂ©Ă©crire lâhistorique
- 7.7 Reset démystifié
- 7.8 Fusion avancée
- 7.9 Rerere
- 7.10 DĂ©boguer avec Git
- 7.11 Sous-modules
- 7.12 Empaquetage (bundling)
- 7.13 Replace
- 7.14 Stockage des identifiants
- 7.15 Résumé
-
8. Personnalisation de Git
- 8.1 Configuration de Git
- 8.2 Attributs Git
- 8.3 Crochets Git
- 8.4 Exemple de politique gérée par Git
- 8.5 Résumé
-
9. Git et les autres systĂšmes
- 9.1 Git comme client
- 9.2 Migration vers Git
- 9.3 Résumé
-
10. Les tripes de Git
- 10.1 Plomberie et porcelaine
- 10.2 Les objets de Git
- 10.3 Références Git
- 10.4 Fichiers groupés
- 10.5 La refspec
- 10.6 Les protocoles de transfert
- 10.7 Maintenance et récupération de données
- 10.8 Les variables dâenvironnement
- 10.9 Résumé
-
A1. Annexe A: Git dans dâautres environnements
- A1.1 Interfaces graphiques
- A1.2 Git dans Visual Studio
- A1.3 Git dans Visual Studio Code
- A1.4 Git dans IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git dans Sublime Text
- A1.6 Git dans Bash
- A1.7 Git dans Zsh
- A1.8 Git dans PowerShell
- A1.9 Résumé
-
A2. Annexe B: Embarquer Git dans vos applications
- A2.1 Git en ligne de commande
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Commandes Git
- A3.1 Installation et configuration
- A3.2 Obtention et création des projets
- A3.3 Capture dâinstantanĂ© basique
- A3.4 Création de branches et fusion
- A3.5 Partage et mise Ă jour de projets
- A3.6 Inspection et comparaison
- A3.7 DĂ©bogage
- A3.8 Patchs
- A3.9 Courriel
- A3.10 SystĂšmes externes
- A3.11 Administration
- A3.12 Commandes de plomberie
1.3 DĂ©marrage rapide - Rudiments de Git
Rudiments de Git
Donc, quâest-ce que Git en quelques mots ? Il est important de bien comprendre cette section, parce que si on comprend la nature de Git et les principes sur lesquels il repose, alors utiliser efficacement Git devient simple. Au cours de lâapprentissage de Git, essayez de libĂ©rer votre esprit de ce que vous pourriez connaĂźtre dâautres VCS, tels que Subversion et Perforce ; ce faisant, vous vous Ă©viterez de petites confusions Ă lâutilisation de cet outil. Git enregistre et gĂšre lâinformation trĂšs diffĂ©remment des autres systĂšmes, mĂȘme si lâinterface utilisateur paraĂźt similaire ; comprendre ces diffĂ©rences vous Ă©vitera des surprises.
Des instantanés, pas des différences
La diffĂ©rence majeure entre Git et les autres VCS (Subversion et autres) rĂ©side dans la maniĂšre dont Git considĂšre les donnĂ©es. Au niveau conceptuel, la plupart des autres systĂšmes gĂšrent lâinformation comme une liste de modifications de fichiers. Ces systĂšmes (CVS, Subversion, Perforce et autres) considĂšrent lâinformation quâils gĂšrent comme une liste de fichiers et les modifications effectuĂ©es sur chaque fichier dans le temps.
Git ne gĂšre pas et ne stocke pas les informations de cette maniĂšre. Ă la place, Git pense ses donnĂ©es plus comme un instantanĂ© dâun mini systĂšme de fichiers. Ă chaque fois que vous validez ou enregistrez lâĂ©tat du projet dans Git, il prend effectivement un instantanĂ© du contenu de votre espace de travail Ă ce moment et enregistre une rĂ©fĂ©rence Ă cet instantanĂ©. Pour ĂȘtre efficace, si les fichiers nâont pas changĂ©, Git ne stocke pas le fichier Ă nouveau, juste une rĂ©fĂ©rence vers le fichier original quâil a dĂ©jĂ enregistrĂ©. Git pense ses donnĂ©es plus Ă la maniĂšre dâun flux dâinstantanĂ©s.
Câest une distinction importante entre Git et quasiment tous les autres VCS. Git a reconsidĂ©rĂ© quasiment tous les aspects de la gestion de version que la plupart des autres systĂšmes ont copiĂ©s des gĂ©nĂ©rations prĂ©cĂ©dentes. Git ressemble beaucoup plus Ă un mini systĂšme de fichiers avec des outils incroyablement puissants construits dessus, plutĂŽt quâĂ un simple VCS. Nous explorerons les bĂ©nĂ©fices quâil y a Ă penser les donnĂ©es de cette maniĂšre quand nous aborderons la gestion de branches dans Les branches avec Git.
Presque toutes les opérations sont locales
La plupart des opĂ©rations de Git ne nĂ©cessitent que des fichiers et ressources locaux â gĂ©nĂ©ralement aucune information venant dâun autre ordinateur du rĂ©seau nâest nĂ©cessaire. Si vous ĂȘtes habituĂ© Ă un CVCS oĂč toutes les opĂ©rations sont ralenties par la latence des Ă©changes rĂ©seau, cet aspect de Git vous fera penser que les dieux de la vitesse ont octroyĂ© leurs pouvoirs Ă Git. Comme vous disposez de lâhistorique complet du projet localement sur votre disque dur, la plupart des opĂ©rations semblent instantanĂ©es.
Par exemple, pour parcourir lâhistorique dâun projet, Git nâa pas besoin dâaller le chercher sur un serveur pour vous lâafficher ; il nâa quâĂ simplement le lire directement dans votre base de donnĂ©es locale. Cela signifie que vous avez quasi-instantanĂ©ment accĂšs Ă lâhistorique du projet. Si vous souhaitez connaĂźtre les modifications introduites entre la version actuelle dâun fichier et son Ă©tat un mois auparavant, Git peut rechercher lâĂ©tat du fichier un mois auparavant et rĂ©aliser le calcul de diffĂ©rence, au lieu dâavoir Ă demander cette diffĂ©rence Ă un serveur ou de devoir rĂ©cupĂ©rer lâancienne version sur le serveur pour calculer la diffĂ©rence localement.
Cela signifie aussi quâil y a trĂšs peu de choses que vous ne puissiez rĂ©aliser si vous nâĂȘtes pas connectĂ© ou hors VPN. Si vous voyagez en train ou en avion et voulez avancer votre travail, vous pouvez continuer Ă gĂ©rer vos versions sans soucis en attendant de pouvoir de nouveau vous connecter pour partager votre travail. Si vous ĂȘtes chez vous et ne pouvez avoir une liaison VPN avec votre entreprise, vous pouvez tout de mĂȘme travailler. Pour de nombreux autres systĂšmes, faire de mĂȘme est impossible ou au mieux trĂšs contraignant. Avec Perforce par exemple, vous ne pouvez pas faire grand-chose tant que vous nâĂȘtes pas connectĂ© au serveur. Avec Subversion ou CVS, vous pouvez Ă©diter les fichiers, mais vous ne pourrez pas soumettre des modifications Ă votre base de donnĂ©es (car celle-ci est sur le serveur non accessible). Cela peut sembler peu important a priori, mais vous seriez Ă©tonnĂ© de dĂ©couvrir quelle grande diffĂ©rence cela peut constituer Ă lâusage.
Git gĂšre lâintĂ©gritĂ©
Dans Git, tout est vĂ©rifiĂ© par une somme de contrĂŽle avant dâĂȘtre stockĂ© et par la suite cette somme de contrĂŽle, signature unique, sert de rĂ©fĂ©rence. Cela signifie quâil est impossible de modifier le contenu dâun fichier ou dâun rĂ©pertoire sans que Git ne sâen aperçoive. Cette fonctionnalitĂ© est ancrĂ©e dans les fondations de Git et fait partie intĂ©grante de sa philosophie. Vous ne pouvez pas perdre des donnĂ©es en cours de transfert ou corrompre un fichier sans que Git ne puisse le dĂ©tecter.
Le mĂ©canisme que Git utilise pour rĂ©aliser les sommes de contrĂŽle est appelĂ© une empreinte SHA-1. Câest une chaĂźne de caractĂšres composĂ©e de 40 caractĂšres hexadĂ©cimaux (de '0' Ă '9' et de 'a' Ă 'f') calculĂ©e en fonction du contenu du fichier ou de la structure du rĂ©pertoire considĂ©rĂ©. Une empreinte SHA-1 ressemble Ă ceci :
24b9da6552252987aa493b52f8696cd6d3b00373
Vous trouverez ces valeurs à peu prÚs partout dans Git car il les utilise pour tout. En fait, Git stocke tout non pas avec des noms de fichiers, mais dans la base de données Git indexée par ces valeurs.
GĂ©nĂ©ralement, Git ne fait quâajouter des donnĂ©es
Quand vous rĂ©alisez des actions dans Git, la quasi-totalitĂ© dâentre elles ne font quâajouter des donnĂ©es dans la base de donnĂ©es de Git. Il est trĂšs difficile de faire rĂ©aliser au systĂšme des actions qui ne soient pas rĂ©versibles ou de lui faire effacer des donnĂ©es dâune quelconque maniĂšre. Par contre, comme dans la plupart des systĂšmes de gestion de version, vous pouvez perdre ou corrompre des modifications qui nâont pas encore Ă©tĂ© entrĂ©es en base ; mais dĂšs que vous avez validĂ© un instantanĂ© dans Git, il est trĂšs difficile de le perdre, spĂ©cialement si en plus vous synchronisez votre base de donnĂ©es locale avec un dĂ©pĂŽt distant.
Cela fait de lâusage de Git un vrai plaisir, car on peut expĂ©rimenter sans danger de casser dĂ©finitivement son projet. Pour une information plus approfondie sur la maniĂšre dont Git stocke ses donnĂ©es et comment rĂ©cupĂ©rer des donnĂ©es qui pourraient sembler perdues, rĂ©fĂ©rez-vous Ă Annuler des actions.
Les trois Ă©tats
Un peu de concentration maintenant. Il est primordial de se souvenir de ce qui suit si vous souhaitez que le reste de votre apprentissage sâeffectue sans difficultĂ©. Git gĂšre trois Ă©tats dans lesquels les fichiers peuvent rĂ©sider : modifiĂ©, indexĂ© et validĂ©.
-
ModifiĂ© signifie que vous avez modifiĂ© le fichier mais quâil nâa pas encore Ă©tĂ© validĂ© en base.
-
IndexĂ© signifie que vous avez marquĂ© un fichier modifiĂ© dans sa version actuelle pour quâil fasse partie du prochain instantanĂ© du projet.
-
Validé signifie que les données sont stockées en sécurité dans votre base de données locale.
Ceci nous mĂšne aux trois sections principales dâun projet Git : le rĂ©pertoire Git, le rĂ©pertoire de travail et la zone dâindex.
Le rĂ©pertoire Git est lâendroit oĂč Git stocke les mĂ©ta-donnĂ©es et la base de donnĂ©es des objets de votre projet. Câest la partie la plus importante de Git, et câest ce qui est copiĂ© lorsque vous clonez un dĂ©pĂŽt depuis un autre ordinateur.
Le rĂ©pertoire de travail est une extraction unique dâune version du projet. Ces fichiers sont extraits depuis la base de donnĂ©es compressĂ©e dans le rĂ©pertoire Git et placĂ©s sur le disque pour pouvoir ĂȘtre utilisĂ©s ou modifiĂ©s.
La zone dâindex est un simple fichier, gĂ©nĂ©ralement situĂ© dans le rĂ©pertoire Git, qui stocke les informations concernant ce qui fera partie du prochain instantanĂ©. On lâappelle aussi des fois la zone de prĂ©paration.
Lâutilisation standard de Git se passe comme suit :
-
vous modifiez des fichiers dans votre répertoire de travail ;
-
vous indexez les fichiers modifiĂ©s, ce qui ajoute des instantanĂ©s de ces fichiers dans la zone dâindex ;
-
vous validez, ce qui a pour effet de basculer les instantanĂ©s des fichiers de lâindex dans la base de donnĂ©es du rĂ©pertoire Git.
Si une version particuliĂšre dâun fichier est dans le rĂ©pertoire Git, il est considĂ©rĂ© comme validĂ©. Sâil est modifiĂ© mais a Ă©tĂ© ajoutĂ© dans la zone dâindex, il est indexĂ©. Sâil a Ă©tĂ© modifiĂ© depuis le dernier instantanĂ© mais nâa pas Ă©tĂ© indexĂ©, il est modifiĂ©. Dans Les bases de Git, vous en apprendrez plus sur ces Ă©tats et comment vous pouvez en tirer parti ou complĂštement occulter la phase dâindexation.