13

特定のリモートでフェッチURLとプッシュURLが同じにならないのはいつですか。

たとえば、git remote show centralcentralという名前のリモートを実行すると、出力は次のようになります。

* remote central
  Fetch URL: aoberoi@example.com:/home/aoberoi/Repositories/example.git
  Push  URL: aoberoi@example.com:/home/aoberoi/Repositories/example.git
  HEAD branch: master
  Remote branch:
    master tracked

2つの異なるURLからフェッチしてプッシュする理由がわかりません。これはどのタイプのワークフローを対象としていますか?

4

2 に答える 2

12

あなたの例には2つの同一のURLが含まれているため、意味がわかりませんが、プッシュとプルのURLは次の理由で異なる可能性があります。

  • プロトコルの問題Gitプロトコルを参照してください:すべてのプロトコルがプッシュ操作をサポートしているわけではないため、URLはわずかに異なります(たとえば、スマートhttpの場合を除いてhttp )
  • 中間リポジトリ:真の「中央」リポジトリと自分のリポジトリの間の「中間者」となる別のリポジトリにプッシュできます。その後、特定の操作を実行でき(たとえば、受信後のフックを介して)、それらの操作(「単体テスト」、「静的コード分析」など)があれば、コミットはそこから「実際の」リモートにプッシュされます... )正常に合格します。
    このような使用法の例については、「これまでに見たソースリポジトリの最も賢い使用法は何ですか?
    」を参照してください。

そうは言っても、 GitのメンテナであるJunio C Hamano()によるコミット697f652(Git 2.3.1 +、2015年第1四半期から第2四半期)は次のように述べています。gitster

単一のリモート(たとえば、「origin」)を使用して、ある場所(つまりupstream)から別の場所(つまり、公開ポイント)にプッシュしながらフェッチしようとするのはよくある間違いのようです。

それは決して満足refs/remotes/origin/*のいくものではなく、そのような世界で何を意味するのかを考えれば、その理由は簡単に理解できます。基本的に現実を反映することはできません。
アップストリームの状態に従う場合、公開したものと一致することはできません。その逆も同様です。

remote.<nick>.pushURLドキュメントには、「 」と「 」が、 2つの別個のリポジトリではなくremote.<nick>.URL、異なるトランスポートを介してアクセスされる同じリポジトリに名前を付けるために存在することが明確ではありませんでした。

于 2010-12-17T06:42:04.440 に答える
0

「ステージング」レポコントリビューターがプッシュし、他の人がレビューと承認後にそこからメインレポに変更をプッシュする場合は、これを使用できると思います。したがって、メインリポジトリからフェッチし、ステージングリポジトリにプッシュします。

于 2010-12-17T06:42:54.647 に答える