it-swarm.com.de

fehler: Ref kann nicht gesperrt werden. 'Refs/Tags' ist vorhanden; 'refs/tags /' kann nicht erstellt werden

Beim Versuch, Änderungen aus Github zu ziehen, wird ein merkwürdiger Fehler "Kann nicht sperren" angezeigt. Ich habe git gc ausprobiert und nach ähnlichen Fehlern gesucht, aber keine Lösung gefunden.

> 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

Ihr Git beschwert sich darüber, dass eine Referenz (und nicht ein Verzeichnis) namens refs/tags vorhanden ist. Es ist nicht klar, was erstellt das wäre, aber ob git rev-parse refs/tags eine Hash-ID erzeugt. Wenn ja, muss diese Referenz weggehen:

git update-ref -d refs/tags

nach dem git fetch funktionieren sollte.

Wenn git rev-parse refs/tags fehlschlägt (was sollte - refs/tags selbst sollte kein gültiger Name sein), ist dies nicht das Problem und es ist nicht klar, was das eigentliche Problem ist.

47
torek

Laufen 

git remote Prune Origin

Arbeitete für mich. Nicht sicher, warum dies das Problem war, aber anscheinend gab es einen defekten Verweis auf einen entfernten Zweig.

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

Das obige Skript protokolliert Fehler in XXX-errors.log und behebt diese, indem es automatisch eine XXX -exist-tags-delete.sh-Datei aus der XXX-errors.log generiert und ausführt.

  1. git update-ref -d refs/tags
  2. git holen
  3. git ziehen
1

fehler: Ref 'Refs/Tags/v2.8' kann nicht gesperrt werden: 'Refs/Tags' ist vorhanden; "refs/tags/v2.8" kann nicht erstellt werden Von github.com: k3it/qsorder

Löschen Sie Ihr lokales Tag v2.8 und v2.9 und ziehen Sie es erneut.

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

$ git pull

Wenn Sie alle lokalen Tags mit einem Befehl löschen möchten:

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

Für eine schnelle Umgehung können Sie verwenden

git Push --delete Origin 'v2.8'

git Push --delete Origin 'v2.9'

0
Shane Fast