Répertoire de travail, zone de préparation et dépôt Git
Concepts de base
Commençons par comprendre les concepts du répertoire de travail, de la zone de préparation et du dépôt Git :
- Espace de travail :est le répertoire que vous pouvez voir sur votre ordinateur.
- Zone de préparation :En anglais, on l'appelle « stage » ou « index ». Il est généralement stocké dans.gitIl est contenu dans le fichier index (.git/index) du répertoire, c'est pourquoi nous appelons aussi parfois la zone de préparation l'index.
- Dépôt de versions :L'espace de travail possède un répertoire caché.git, qui n'est pas le répertoire de travail, mais plutôt le dépôt Git.
Le diagramme suivant illustre la relation entre le répertoire de travail, la zone de préparation dans le dépôt et le dépôt :

-
Sur la figure, le côté gauche est le répertoire de travail, et le côté droit est le dépôt. Dans le dépôt, la zone marquée « index » est la zone de préparation (stage/index), et la zone marquée « master » est l’arborescence de répertoires représentée par la branche master.
-
D’après le diagramme, nous pouvons voir que « HEAD » est en fait un « curseur » pointant vers la branche master. Par conséquent, partout où HEAD apparaît dans les commandes montrées dans le diagramme, il peut être remplacé par master.
La zone marquée « objects » dans la figure est la base de données d’objets de Git, qui se trouve en réalité dans le répertoire « .git/objects » et contient divers objets et contenus qui ont été créés.
Lors de l’exécution de la commande sur les fichiers qui ont été modifiés (ou ajoutés) dans le répertoire de travailgit addLorsque la commande est exécutée, l’arborescence de répertoires de la zone de préparation est mise à jour, et le contenu des fichiers modifiés (ou nouvellement ajoutés) dans le répertoire de travail est écrit dans un nouvel objet de la base de données d’objets, tandis que l’ID de cet objet est enregistré dans le fichier index de la zone de préparation.
Lorsqu’une opération de commit (git commit) est effectuée, l’arborescence de répertoires de la zone de préparation est écrite dans le dépôt (base de données d’objets), et la branche master est mise à jour en conséquence. Autrement dit, l’arborescence de répertoires pointée par master est l’arborescence de répertoires de la zone de préparation au moment du commit.
Lors de l’exécution degit reset HEADLorsque la commande est exécutée, l’arborescence de répertoires de la zone de préparation est réécrite et remplacée par l’arborescence de répertoires pointée par la branche master, mais le répertoire de travail n’est pas affecté.
Lors de l’exécution degit rm --cached <file>, la commande supprime directement les fichiers de la zone de préparation, tandis que le répertoire de travail reste inchangé.
Lors de l'exécution degit checkout .ougit checkout -- <file>, la commande remplacera les fichiers du répertoire de travail par tous les fichiers, ou les fichiers spécifiés, de la zone de préparation. Cette opération est très dangereuse, car elle effacera les modifications du répertoire de travail qui n'ont pas été ajoutées à la zone de préparation.
Lors de l'exécution degit checkout HEAD .ougit checkout HEAD <file>, la commande remplacera les fichiers à la fois dans la zone de préparation et dans le répertoire de travail par tous les fichiers, ou certains fichiers, de la branche master pointée par HEAD. Cette commande est également extrêmement dangereuse, car elle effacera non seulement les modifications non validées du répertoire de travail, mais aussi les modifications non validées de la zone de préparation.
1. Répertoire de travail
Le répertoire de travail est le répertoire du projet sur votre ordinateur local, où vous créez, modifiez et supprimez des fichiers. Le répertoire de travail contient tous les fichiers et sous-répertoires du projet actuel.
Fonctionnalités :
- Affiche l'état actuel du projet.
- Les modifications de fichiers sont effectuées dans le répertoire de travail, mais ces modifications n'ont pas encore été enregistrées dans le contrôle de version.
2. Zone de préparation
La zone de préparation est une zone de stockage temporaire qui contient des instantanés des fichiers qui sont sur le point d'être validés dans le dépôt. Avant de valider, vous pouvez ajouter sélectivement des modifications du répertoire de travail à la zone de préparation.
Fonctionnalités :
- La zone de préparation stocke les modifications qui seront incluses dans la prochaine validation.
- Vous pouvez l'utiliser plusieurs fois
git addcommande pour ajouter des fichiers à la zone de préparation jusqu'à ce que vous soyez prêt à valider toutes les modifications.
Commandes courantes :
git add filename # 将单个文件添加到暂存区 git add . # 将工作区中的所有修改添加到暂存区 git status # 查看哪些文件在暂存区中
3. Dépôt
Le dépôt contient l'historique complet des versions du projet.
Chaque commit crée un nouvel instantané dans le dépôt. Ces instantanés sont immuables, garantissant l'historique complet du projet.
Fonctionnalités :
- Le dépôt est divisé en dépôt local et dépôt distant. Cela fait principalement référence au dépôt local ici.
- Le dépôt local est stocké dans
.gitle répertoire, qui contient tous les objets et références validés.
Commandes courantes :
git commit -m "Commit message" # 将暂存区的更改提交到本地版本库 git log # 查看提交历史 git diff # 查看工作区和暂存区之间的差异 git diff --cached # 查看暂存区和最后一次提交之间的差异
La relation entre le répertoire de travail, la zone de préparation et le dépôt
1. Répertoire de travail -> Zone de préparation
Utilisez la commande git add pour ajouter les modifications du répertoire de travail à la zone de préparation.
git add filename
2. Zone de préparation -> Dépôt
Utilisez la commande git commit pour valider les modifications de la zone de préparation dans le dépôt.
git commit -m "Commit message"
3. Dépôt -> Dépôt distant
Utilisez la commande git push pour pousser les commits du dépôt local vers le dépôt distant.
git push origin branch-name
4. Dépôt distant -> Dépôt local
Utilisez la commande git pull ou git fetch pour récupérer les mises à jour depuis le dépôt distant.
git pull origin branch-name # 或者 git fetch origin branch-name git merge origin/branch-name
Exemple
Supposons que vous ayez modifié file.txt dans le répertoire de travail :
1. Espace de travail
Modifiez file.txt et enregistrez.
2. Zone de préparation
Ajoutez les modifications à la zone de préparation :
git add file.txt
3. Dépôt
Validez les modifications de la zone de préparation vers le dépôt local :
git commit -m "Update file.txt"
4. Dépôt distant
Poussez les commits locaux vers le dépôt distant :
git push origin main
En comprenant les rôles du répertoire de travail, de la zone de préparation et du dépôt ainsi que leurs interrelations, vous pouvez utiliser Git plus efficacement pour le contrôle de version et le développement collaboratif.
autres extensions