2017-04-21 12 views
7

を作成できませんgithubから変更を取り込もうとしたときに奇妙な「ロックできません」エラーが発生しました。私はgit gcを試してみましたが、似たようなエラーを見つけましたが、解決策を見つけることはできません。エラー:refをロックできません。 'refs/tags'が存在します。 'refs/tags/

> 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) 

答えて

27

あなたGitはrefs/tagsという名前の参照(ディレクトリではなく)が存在することを不平を言っています。 は、を作成しますが、git rev-parse refs/tagsがハッシュIDを生成するかどうかはわかりません。もしそうなら、その参照が離れて行く必要があります:

git fetchは動作するはずです後
git update-ref -d refs/tags 

git rev-parse refs/tagsが(それ自体は有効な名前であってはならないrefs/tagsをshould-た)失敗した場合、これはない問題であり、それは実際の問題が何であるかは明らかではありません。あなたの周りの迅速な作業のために

+0

でした。どのように私はこの状態に入ったのか分かりません。しかし、今はすべて良いです。ありがとうございました。 – k3it

+0

git fetchにもっとエラーがあった –

1

error: cannot lock ref 'refs/tags/v2.8': 'refs/tags' exists; cannot create 'refs/tags/v2.8' From github.com:k3it/qsorder

再び引き、あなたの地元のタグv2.8v2.9を削除してみてください。


コマンドにより、すべてのローカルタグを削除したい場合は

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

$ git pull 

$ git tag | xargs git tag -d 
+0

が動作しませんでした。 pullはgit fetch -pと同じエラーです。リモートが先に進み、プルが機能しないため、ローカルの変更をプッシュできません。 – k3it

+0

私のために働きました。ありがとう! – Maor

+0

すべてのタグを手作業でやっているのは面倒な仕事です。下の答えで自動的に削除コマンドを生成することができました。 –

0

は、上記のスクリプトは、XXX-errors.logにエラーを記録し、XXXを生成し、実行することによって、それらを修正します

git push --delete origin 'v2.8'

git push --delete origin 'v2.9'

+0

git pushは動作しません –

1
#!/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 

を使用することができます-exist-tags-delete.shを次のコマンドを使用してXXX-errors.logから自動的に削除します。

  1. gitの更新-REF -d、参考文献/タグ
  2. gitのは、私のために働い

    git remote prune origin 
    

    を実行

1

を引っ張る

  • のgitを取得。なぜこれが問題だったのか分かりませんが、リモートブランチへの参照が壊れているようです。

  • 関連する問題