0

問題

これは GitExtensions のバグのように聞こえますが、特定の情報が見つかりませんでした。複数のブランチを持つ裸のリポジトリがある場合に問題が発生すると思います。次にプッシュすると、無視を選択すると混乱したブランチが見つかるという警告が表示されます。または、押し方によっては、警告すら表示されず、どこでも破滅です。

と という 2 つのローカル ブランチがあるとmasteranotherます。そして、originプッシュ用のデフォルトセット。origin/master通常のプッシュの後、 andも見つかりますorigin/another。それだけです。

しかし、運命のプッシュの後、重複origin/masterorigin/anotherプラスが見つかりorigin/refs/heads/master、それも重複しています。余分なブランチごとに。また、すべてのブランチなどをプッシュしているわけでも、複数のブランチ機能を使用しているわけでもありません。

実際、これが起こった後は、単純pushにエラーなしではいられません! (はい、もちろんWindowsを使用しています)

Pushing to \\\server\git\repo
error: dst refspec refs/heads/another matches more than one.
error: failed to push some refs to '\\\server\git\repo'

でブランチをリストすると、問題が明らかになりgit branch -rます。

それを修正するには

次のようにする必要があります。

  1. のフォルダを手動で削除します。を使用するだけで機能する場合もあれば、より堅牢で直接フォルダーに移動する必要がある場合もあります。これは難しいステップであり、主な問題はそれらが機能しないときに発生します...refs/heads origin git push origin :<branchName>
  2. git fetch -p、元の変更をローカルにもたらすため。
  3. 最終的にすべてのクライアントを調べて使用しgit remote updateます。必要に応じて、同じブランチを 1 つずつ、または任意の方法で削除します。たとえば、堅牢かつ直接フォルダーに再度移動します。この手順には、まだ診断できない別の問題がある場合があります。

周波数

私たちにとって、これは明言された事実です。正確な原因を確認するために多くの実験を行っていませんが、このレポを使用する 5 台のマシンのいずれかで発生し、bare.

そして、それが起こるたびに、私は走って、それを修正する方法を見つけなければなりません. 今回は、ウェブ上で十分に具体的なものを見つけることができなかったので、それを文書化することにしました.

どうして

ここでの問題は、なぜこれが起こるのか、どうすればそれを防ぐことができるのかということです。GitExtensionsの障害のみですか? 私たちの側では、GitExtensions のこの特定のシナリオでのみ発生します。

4

1 に答える 1

0

別のより単純な担当者を扱っているときに、偶然に(偶然にもそして最後に)犯人を見つけました!

.git/configにこれらの2行がありました[remote "origin"]

push = refs/heads/*:refs/heads/*
push = refs/tags/*:refs/tags/*

これを一番上に追加するだけで、すべての問題が解決しました。

push = *:* # hack for git extensions

最初の2行の理由は、タグとヘッドを含め、「すべてをサーバーにプッシュする」ことでした。

どういうわけか、GitExtensionsはそれらを読み取り、それ自体のデフォルトの動作を間違った方法で変更し(なぜ最初の設定の正しい側になるのでしょうか)、プッシュするたびにこれを効果的に実行すると思います。

> git push origin *:refs/heads/*

そして、男の子、私はあなたに言いますか、その混乱を片付けることは簡単な仕事ではありません!

解決しました。

于 2012-09-04T18:47:41.037 に答える