0

中央サーバーに共有の「開発」リポジトリがあり、さまざまなブランチがあり、それらをv4、v5、v6と呼びます

開発者 (「Alice」) が v6 にコミットし、すべて問題ないようです。関連するすべての詳細を取得した受信後フックがあります。継続的インテグレーション サーバーはレポを複製し、このコミットをチェックアウトして作業することができます。すべて問題ありません。

ただし、個人用コピーと git pull で v6 をチェックアウトすると、「Alice」というコミットがまったく作成されません。ログに表示されないか、マシンにまったくプルされません。

cgit を介してリポジトリを参照すると、コミットが「ログ」に表示されませんが、SHA とブランチから表示 URL を作成すると、コミットを確認できます。

アリスが中央の (裸の) レポにある目に見えないパラレル v6 ブランチにプッシュしたようなものです。この目に見えないブランチを明らかにするにはどうすればよいですか?

それで、何が起こったのでしょうか?アリスがコミットする数時間前に、git push origin :v6コマンドを使用して中央レポの v6 ブランチを削除しました。v6 は空で、元のマスターに基づいていましたが、代わりに最新の v5 の作業から派生させたいと思いました。この目的のために、v5 をチェックアウトし、git pull を実行してから、これを v6 にチェックアウトしました。次に、この v6 を共有リポジトリにプッシュしました。

したがって、私の削除が機能しなかったようで、どういうわけか Alice は v6 にプッシュしましたが、git が v6 であると考える v6 ではありませんでした。

私の修正?ベア リポジトリの refs/heads/Release_6 を変更して、Alice のコミットの SHA を含めます。

しかし、それは正しいことですか?深刻な不満なしに、どのように git はシャドウ ブランチを維持または許可しますか? Git は私のレポや Alice のレポで文句を言っていません..

回答: むき出しのレポ refs/heads/v6 が私の不器用なリベースの試みによって SNAFU になったようです。Alice のコミットの SHA を裸のレポ refs/heads/v6 に書き込んだ後、すべてが表示されます。

POST_MORTEM 分析。

サーバーの「ベア」レポは、実際にはオリジナルの作品から (--bare を使用して) 複製されたものです。元のリポジトリには v4、v5、v6 がありました。

git fetch origin +refs/heads/*:refs/heads/*「+」修飾子のために、元のレポから「レガシー」v6で作成した「新しい」v6を簡単に上書きしたと思います。

これは、v6 の作業が機能しているように見えたのに、週末にかけて姿を消した理由を説明しています。

gitのせいではなく、明らかに私自身の間違いです。いたずらなステップに座る時間。

4

1 に答える 1

0

あなたは私が疑うすべてのコマンドを与えたわけではありませんが、これが私にはどのように見えるかです.

あなた、Alice、および 'origin' (中央リポジトリ) はすべて v6 ブランチを持っています。これらは、リポジトリ v6、alice/v6、origin/v6 で呼び出されます (alices リポジトリを指すリモートがあると仮定します)。「git push origin :v6」で中央のものを削除しました。これにより、あなたと alice には v6 ブランチが残ります (「git branch -d v6」でローカル ブランチも削除するか、プッシュ後に「git fetch origin --prune」を実行しない限り)。

この時点では、origin/v6 はありません。alice/v6 とローカルの v6 は同じコミットを参照しています。アリスは作業を行い、origin/v6 にプッシュして、新しい作業を上にしてブランチを再作成します。

Origin/v6 をローカルに戻すフェッチを行います。ただし、v6 をチェックアウトして git pull または git merge origin/v6 を実行しない限り、ローカル ブランチは origin/v6 に一致するように更新されません。

ここでの本当の問題は、現在の v5 で v6 をリベースすることを計画していることです。それを行いたい場合は、関係するすべての開発者に同意してもらう必要があります。アリスがコミットする前にこれを行っていたら、非常にイライラするはずです。公開されたブランチのリベースに関する Git の本のセクションを読み直して、新しい作業を v65 から v6 にマージすることについて考えてみてください。

于 2013-02-04T15:09:49.657 に答える