web-dev-qa-db-fra.com

erreur: impossible de verrouiller ref .. 'refs/tags' existe; ne peut pas créer 'refs/tags /

Je reçois une étrange erreur "ne peut pas verrouiller la référence" en essayant d'extraire les modifications de github J'ai essayé git gc, et j'ai cherché des erreurs similaires mais je ne trouve pas de solution.

> git pull
error: cannot lock ref 'refs/tags/v2.8': 'refs/tags' exists; cannot create 'refs/tags/v2.8'
From github.com:k3it/qsorder
 ! [new tag]         v2.8       -> v2.8  (unable to update local ref)
error: cannot lock ref 'refs/tags/v2.9': 'refs/tags' exists; cannot create 'refs/tags/v2.9'
 ! [new tag]         v2.9       -> v2.9  (unable to update local ref)
17
k3it

Votre Git se plaint de l'existence d'une référence (plutôt que d'un répertoire) nommée refs/tags. On ne sait pas ce que créerait cela, mais on verra si git rev-parse refs/tags produit un ID de hachage. Si oui, cette référence doit disparaître:

git update-ref -d refs/tags

après quoi git fetch devrait fonctionner.

Si git rev-parse refs/tags échoue (ce qui devrait être —refs/tags lui-même ne devrait pas être un nom valide), alors c'est pas le problème et le problème n'est pas clair.

47
torek

Fonctionnement 

git remote Prune Origin

Travaillé pour moi Pas sûr de savoir pourquoi c'était le problème, mais il semble qu'il y ait eu une référence brisée à une branche distante.

21
Xstatic
#!/usr/bin/env bash
echo "update-ref delete refs/tags"
log="git-update-ref-errors.log"
script="./git-update-ref-exist-tags-delete.sh"
git_command="git update-ref -d refs/tags"

echo "log errors from ${git_command} to ${log}"
${git_command} 2>&1 | > ${log}
echo "show errors to ${log}"
cat ${log}
echo create ${script}
touch ${script}
echo "add execute (+x) permissions to ${script}"
chmod +x ${script}
echo "generate ${script} from errors log ${log}"
${git_command} 2>&1 | grep 'exists' | sed -n "s:.*\: 'refs/tags/\(.*\)' exists;.*:git tag -d '\1':p" >> ${script}
echo "execute ${script}"
${script}

echo fetch
log="git-fetch-errors.log"
script="./git-fetch-exist-tags-delete.sh"
git_command="git fetch"
echo "log errors from ${git_command} to ${log}"
${git_command} 2>&1 | > ${log}
echo "show errors from ${log}"
cat ${log}
echo create ${script}
touch ${script}
echo "add execute (+x) permissions to ${script}"
chmod +x ${script}
echo "generate ${script} from errors log ${log}"
${git_command} 2>&1 | grep 'exists' | sed -n "s:.*\: 'refs/tags/\(.*\)' exists;.*:git tag -d '\1':p" >> ${script}
echo "execute ${script}"
${script}
git fetch

echo pull
log="git-pull-errors.log"
script="./git-pull-exist-tags-delete.sh"
git_command="git pull"
echo "log errors from ${git_command} to ${log}"
${git_command} 2>&1 | > ${log}
echo "show errors from ${log}"
cat ${log}
echo create ${script}
touch ${script}
echo "add execute (+x) permissions to ${script}"
chmod +x ${script}
echo "generate ${script} from errors log ${log}"
${git_command} 2>&1 | grep 'exists' | sed -n "s:.*\: 'refs/tags/\(.*\)' exists;.*:git tag -d '\1':p" >> ${script}
echo "execute ${script}"
${script}
git pull

Le script ci-dessus enregistre les erreurs dans XXX-errors.log et les corrige en générant et en exécutant automatiquement XXX-exist-tags-delete.sh à partir de XXX-errors.log à l'aide des commandes suivantes:

  1. git update-ref -d refs/tags
  2. aller chercher
  3. git pull
1
Tomer Bar-Shlomo

erreur: impossible de verrouiller ref 'refs/tags/v2.8': 'refs/tags' existe ne peut pas créer 'refs/tags/v2.8' De github.com:k3it/qsorder

Essayez de supprimer vos balises locales v2.8 et v2.9, puis tirez à nouveau.

$ git tag -d v2.8 
$ git tag -d v2.9

$ git pull

Si vous souhaitez supprimer toutes les balises locales à l'aide d'une commande:

$ git tag | xargs git tag -d
1
Sajib Khan

Pour un travail rapide, vous pouvez utiliser

git Push --delete Origin 'v2.8'

git Push --delete Origin 'v2.9'

0
Shane Fast