|
| 1 | +--- |
| 2 | +layout: page |
| 3 | +title: Bases |
| 4 | +permalink: bases.html |
| 5 | +--- |
| 6 | + |
| 7 | + |
| 8 | +## Comment fonctionne Git ? |
| 9 | + |
| 10 | +Git est un logiciel pouvant fonctionner en ligne de commande, on lui "parle" en utilisant des commandes, telles que `pull`, `push`, `clone`, `add`, `commit`... |
| 11 | + |
| 12 | +Le principe: |
| 13 | + |
| 14 | +1. En utilisant des commandes Git, on enregistre des "snapshots" qui conservent l'état du projet à un point précis. |
| 15 | +2. On synchronise les modifications locales avec un serveur distant. Git s'occupe de fusionner les modifications. |
| 16 | + |
| 17 | +### La notion de commit |
| 18 | + |
| 19 | +La commande **git commit** est centrale dans Git: c'est cette commande qui crée un nouvel "instantané" de l'état de votre projet, dans son intégralité. |
| 20 | + |
| 21 | +Comme le dit David Demaree dans *Git for Humans*: |
| 22 | + |
| 23 | +- Un commit enregistre les modifications apportées aux fichiers figurant dans la base de données de Git: il indique par exemple qu'un fichier est passé de la version A à la version B. |
| 24 | +- Chaque commit est autonome: il ne référence pas seulement ce qui a changé, mais aussi tout ce qui compose l'état de votre projet à un moment donné. |
| 25 | + |
| 26 | +### Les états des fichiers |
| 27 | + |
| 28 | +Le livre "*[Pro Git](https://git-scm.com/book/fr/v2)*" donne une bonne explication des "trois états" dans lesquels peuvent se trouver les fichiers: |
| 29 | + |
| 30 | +Git gère **trois états** dans lesquels les fichiers peuvent résider : `modifié`, `indexé` et `validé`. |
| 31 | + |
| 32 | +- **Modifié** (*Modified*) signifie que vous avez modifié le fichier mais qu’il n’a pas encore été validé (*committed*). |
| 33 | +- **Indexé** (*Staged*) signifie que vous avez marqué un fichier modifié dans sa version actuelle pour qu’il fasse partie du prochain instantané du projet. |
| 34 | +- **Validé** (*Committed*) signifie que les données sont stockées en sécurité dans votre base de données locale. |
| 35 | + |
| 36 | +Ceci nous mène aux **trois sections principales** d’un projet Git : le **répertoire de travail** (*working directory*), la **zone d’index** (*staging area*) et le **répertoire Git** (*Git directory*). |
| 37 | + |
| 38 | + |
| 39 | + |
| 40 | +- Le **répertoire de travail** (*working tree* ou *working directory*) : votre espace de travail, sur votre ordinateur. En langage Git: "c'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". |
| 41 | +- La **zone d’index** (*staging area*). On l’appelle aussi des fois la zone de préparation. On y ajoute des fichiers avec la commande "git add": ils sont désormais indexés. Cette zone stocke tout ce qui fera partie du prochain instantané (commit). La zone d'index n'est pas synchronisée ni partagée, elle n'existe que sur votre ordinateur. |
| 42 | +- Le **répertoire Git** (*Git directory*) 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. |
| 43 | + |
| 44 | +On pourrait encore ajouter deux sections: |
| 45 | + |
| 46 | +- Le **répertoire Git distant** (remote): il s'agit du serveur, par exemple sur Github (ou Gitlab, Framagit). |
| 47 | +- Le **stash** : des modifications "mises de côté". Permet de sauvegarder temporairement des changements apportés à votre copie de travail pour que vous puissiez effectuer d'autres tâches, puis revenir et les réappliquer par la suite. |
| 48 | + |
| 49 | + |
| 50 | + |
| 51 | +L’utilisation standard de Git se passe comme suit : |
| 52 | + |
| 53 | +1. vous modifiez des fichiers dans votre répertoire de travail (état = modifié). |
| 54 | +2. vous **indexez** (*stage*) les fichiers modifiés, ce qui ajoute des instantanés de ces fichiers dans la zone d’index (état = indexé). |
| 55 | +3. vous **validez** (*do a commit*), 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 (état = validé). |
0 commit comments