web-dev-qa-db-ja.com

gitコマンドの「Origin」と「remote」の違いは何ですか?

Git lingoでは、Originremoteは同じものですか?または、Originはローカルディレクトリを参照していますか?

git Push -u Origin masterの場合:次の解釈のうち正しいものはどれですか?

  1. 「アップストリームをすべて「Origin」と呼ばれるリモートリポジトリおよびそのブランチ「master」にプッシュします。」
  2. 「「Origin」と呼ばれるローカルの発信元レポジトリから上流の「master」ブランチまですべてをプッシュする」

明確化に感謝します!

私の質問に対する答えは、私にとって2つの問題を明らかにしました:

  1. Originは、リモートリポジトリのローカルクローンコピーではなく、リモートリポジトリを指します。 Originremoteのエイリアスであり、git cloneの時点で作成されていることを読み取ると、これは明確ではありません。
  2. Originは、git Push -u Origin master内のリモートリポジトリを指します。これは、リポジトリのローカルコピーが暗黙的に「まれに参照される」ためです。
60
YCode

Git lingoのOriginは、リポジトリが最初に複製されたリモートのデフォルト名にすぎません。 sourceまたはremote1または単にremote

gitはピアツーピアの分散システムであり、クライアント/サーバー、マスター/スレーブ、親/子の関係という組み込みの概念を持たないものであることを覚えておいてください(ただし、特定のシナリオのユーザー)。

すべてのリモートは同等です。 Originは、単純に(そして文字通り)それらの等しいものの最初のものです(クローンリポジトリの場合)。 :)

また、Janがコメントで指摘しているように、各リモートに関連付けられている名前は、便宜上のものです。 Originが実際に機能しない場合は、変更できます。

Pushステートメントの解釈に関しては、最初のものが正しいことに最も近いですが、書かれているプッシュコマンドはローカルmasterブランチをmasterブランチにプッシュします(ローカルで構成された)名前Originで識別されるリモート。

リモートにmasterブランチがない場合は、ブランチが作成されます。

プッシュコマンドとフラグ、オプションなどの詳細はもちろんドキュメントにあります

操作はレポジトリのコンテキストで実行されるため、「ローカル」レポジトリを明示的に参照することはほとんどありません。

61
Deltics

いいえ、同じことを意味するものではありません。

remote- speakのgitは、GitHubまたは別のgitサーバーなどのリモートリポジトリを指します。

Originは、慣例により、gitのデフォルトのリモート名です。 git clone <url>を実行すると、<url>Originという名前でローカルリポジトリに自動的に追加されます。もちろん、git remote addを使用して別の名前で他のリモートを追加できます。

git Push -u Origin masterを実行すると、「ローカルマスターからOriginという名前のリモートにすべてをプッシュする」という意味になります。もちろん、このコマンドの構造はより一般的です-より一般的な形式はgit Push -u <remote> <branch>です。これはbranchという名前のブランチを指定されたリモートにプッシュし、リモートの場合はそれを遠端に作成しますまだ持っていません(それが-uフラグの機能です)。

追加の補足として、git Pushはデフォルトで、現在のブランチをgit Push Origin <current-branch>に対応するOriginにプッシュします。

13

それぞれが異なる名前を持つ複数のリモートを持つことができます-デフォルトの「Origin」など

あなたの質問は、あなたが現在masterブランチをチェックアウトしていると仮定しています。

git Push -u Origin master

Masterという名前のローカルブランチを、masterという名前のブランチとして「Origin」リモートにプッシュします。 -uフラグは、ローカルgitに、そのリモートブランチをローカルブランチのアップストリームとして追跡するように指示します。

12
Jeff Puckett

remoteは単なるWordです。どこか他のGitリポジトリを識別するために使用する名前です。

文字列Originは、他の( "Origin" -al)Gitリポジトリからクローンを作成するときに、git cloneが自動的に入れる(単一の)リモートのデフォルト名です。他の名前を選択したり、リモートを追加したりできます。各リモートには、少なくともURLがあります。URLは、他のリポジトリを見つける場所です。

git Pushの3番目の単語—さまざまなフラグを追加する場合、必要に応じてこの数値を調整します。この場合、-uを追加したので、4番目のWordになりました。これは通常、リモートの名前です。

残りの単語はすべてrefspecsであり、要約できます(ただし、100%正確ではありません...実際、カウント方法によっては50%未満です:-)) asコロンで区切られたブランチ名のペア。

masterのようなブランチ名を1つだけ記述した場合、Gitはそれを「アップストリームの(一部)が設定されている場合はそれを使用し、そうでない場合はコロンの後に同じ名前を使用します」通常、アップストリームは、設定されている場合、同じ基本名を持っているため、masterは通常master:masterを意味します。 Gitは(リモートのURLのGit)を送信し、yourブランチ(左側の名前)で見つかったコミットを設定し、を設定するように要求しますブランチ(右側の名前)へのブランチ(そのブランチに対してプッシュしたばかりの同じチップコミット)。

Refspecを指定しない場合、GitのデフォルトはGitバージョンに依存します。 Gitバージョン2.0以降、デフォルトではcurrent branchをリモート上の同じ名前のブランチにプッシュします。

-uフラグは、git Pushに、プッシュが成功した場合、プッシュしたブランチのアップストリームをsetする必要があることを伝えます。

ブランチのupstreamは、リモートの名前と、そのリモートのブランチの名前の2つの部分に分かれています。 git Push両方の項目を指定したため、リモートの名前はOriginで、ブランチは暗黙のmaster:masterからの2番目(コロン後)masterでしたmaster—これが成功すると、masterのアップストリームをOrigin/masterに設定します。

編集/upstream設定でOrigin/masterがどこから来たのか、非常に合法的に疑問に思うかもしれません。残念ながら、これは膨大な量の混乱を招きます。今のところは、remotebranch 、およびremote-tracking branchはすべてGitで異なるものです。それらはすべてさまざまな方法で関連していますが、それらは同じではなく、用語が非常に具体的な意味。Wordtrackもオーバーロードされています。新しい用語upstreamは優れていますが、すべての説明で使用されているわけではありません。

5
torek

いいえ、remoteOriginの親構造です。これは、リポジトリを複製するときにGitが作成するremoteのデフォルト名にすぎません。

この質問の詳細: Gitの「起源」とは?

2
Dave