Problème
Utilisateurs de Windows peuvent souvent avoir ce problème
git pull
donne l'erreur : error: cannot lock ref
unable to update local ref
Cause
Cause a) Il existe de multiples branches, dont les noms, du début jusqu'à une barre oblique (ou jusqu'à la fin), ne diffèrent que par les majuscules et les minuscules. .
Branch name clashing (upper/lower case)
#######################################
# Example 1)
#############################
feature/releasecandidate/fix123
feature/releaseCandidate/improveFeature789
------------------------
^
Identical from beginning up to a slash (here the 2nd one)
except for the marked letter, where the upper/lower case differs
# Example 2)
#############################
releaseBranch
releasebranch
-------------
^
Identical from beginning to the end
except for the marked letter
Cause b) C'est aussi un problème sous linux : Une branche est un préfixe d'une autre, avec une barre oblique de séparation. :
Prefix with slash-boundary
#######################################
# Example 1) - also a problem on linux
#############################
feature/release2021
feature/release2021/fixIssue07
^
slash boundary
# Example 2)
#############################
feature/release2022
feature/Release2022/fixIssue99
^ ^
differing case slash boundary
(problem on
windows)
Solution
Retirer la cause (voir exact Cause ci-dessus).
# inspect your branches, to see if you have the upper/lower case problem
git ls-remote --heads YOUR-GIT-URL
Par exemple : créer une politique de nommage des branches, par exemple toutes les lettres en minuscules ; ou les lettres avant la dernière barre oblique en minuscules. Ou un crochet intelligent, qui détecte une violation. (mais attention : dans la cause a) le problème ne se pose que sous Windows, pas sous linux).
Contexte
Le problème est que Windows stocke ces branches (de l'exemple 1 et 2) dans le fichier .git
dossier
# inspect the files/folders under
.git/refs/remotes/origin/
et en Cause a) Windows ne peut pas distinguer les différences entre les majuscules et les minuscules, donc git sur window devient fou.
En Cause b) vous ne pouvez pas avoir un dossier (par ex. feature/release2021/
) avec le même nom qu'un fichier ( feature/release2021
).
Solution de rechange
Une solution de contournement à court terme qui fonctionne souvent (jusqu'à ce que vous ayez éliminé la cause) est la suivante :
git pack-refs --all
# delete the contents of .git/refs/remotes/origin/*
rm -rf .git/refs/remotes/origin/*
git pull; git pull; git pull # all good? yes!
2 votes
Où se trouve le référentiel local ? L'avez-vous créé sous un utilisateur différent de celui que vous utilisez pour exécuter le pull ? Cela ressemble à un problème d'autorisation de fichier.
0 votes
Oui, vous avez raison après avoir dit que le propriétaire des fichiers du projet était un autre utilisateur, maintenant ma question semble si stupide, mais vous m'avez donné la réponse, s'il vous plaît faites-en une réponse pour la choisir comme la meilleure ;)
0 votes
S'il vous plaît @tpg2114 ajouter ceci comme une réponse pour le choisir