Tester avec des opérations Git concurentes
Dans les étapes précédentes, nous avons vu comment la présence du fichier .git/index.lock
empêche l'exécution de commandes Git telles que git status
. Ce fichier de verrouillage est essentiel pour éviter les problèmes lorsque plusieurs opérations Git pourraient tenter de modifier l'index en même temps.
Simulons un scénario où une opération Git est en cours et crée le fichier de verrouillage. Bien que nous ne puissions pas exécuter réellement deux commandes Git exactement au même microseconde dans ce simple environnement de laboratoire, nous pouvons comprendre le concept. Imaginez que vous exécutiez une commande Git longue (comme un rebase complexe ou un grand commit) et qu'elle soit interrompue. Cela laisserait le fichier de verrouillage en place.
Étant donné que nous avons déjà le fichier .git/index.lock
depuis les étapes précédentes, essayons d'effectuer une autre opération Git, comme ajouter un fichier. Tout d'abord, créez un nouveau fichier :
echo "This is another file." > another_file.txt
Maintenant, essayez d'ajouter ce fichier à la zone de préparation (staging area) :
git add another_file.txt
Vous verrez probablement le même message d'erreur fatal: Unable to create ... .git/index.lock: File exists.
. Cela confirme que tant que le fichier de verrouillage est présent, la plupart des commandes Git qui interagissent avec l'index seront bloquées.
Pour résoudre ce problème lorsque vous êtes certain qu'aucun autre processus Git n'est en cours d'exécution, vous devez supprimer manuellement le fichier .git/index.lock
. Utilisez la commande rm
pour supprimer le fichier :
rm .git/index.lock
Maintenant que le fichier de verrouillage est supprimé, essayons à nouveau la commande git add
:
git add another_file.txt
Cette fois, la commande devrait s'exécuter sans erreur de verrouillage. Vous pouvez vérifier cela en exécutant git status
:
git status
Vous devriez voir another_file.txt
répertorié sous "Changes to be committed", indiquant qu'il a été ajouté avec succès à la zone de préparation.
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: another_file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
message.txt
Remarque : Vous pourriez également voir message.txt
répertorié comme non suivi (untracked) si vous ne l'avez pas encore validé (committed) depuis le laboratoire précédent. Cela est normal.
Cet exercice montre comment le fichier .git/index.lock
agit comme une protection et comment le supprimer manuellement s'il reste en place suite à une interruption. Soyez toujours prudent lorsque vous supprimez manuellement le fichier de verrouillage et assurez-vous qu'aucun autre processus Git n'est actif.