Git lingoでは、Origin
とremote
は同じものですか?または、Origin
はローカルディレクトリを参照していますか?
git Push -u Origin master
の場合:次の解釈のうち正しいものはどれですか?
明確化に感謝します!
私の質問に対する答えは、私にとって2つの問題を明らかにしました:
Origin
は、リモートリポジトリのローカルクローンコピーではなく、リモートリポジトリを指します。 Origin
がremote
のエイリアスであり、git clone
の時点で作成されていることを読み取ると、これは明確ではありません。Origin
は、git Push -u Origin master
内のリモートリポジトリを指します。これは、リポジトリのローカルコピーが暗黙的に「まれに参照される」ためです。Git lingoのOrigin
は、リポジトリが最初に複製されたリモートのデフォルト名にすぎません。 source
またはremote1
または単にremote
。
git
はピアツーピアの分散システムであり、クライアント/サーバー、マスター/スレーブ、親/子の関係という組み込みの概念を持たないものであることを覚えておいてください(ただし、特定のシナリオのユーザー)。
すべてのリモートは同等です。 Origin
は、単純に(そして文字通り)それらの等しいものの最初のものです(クローンリポジトリの場合)。 :)
また、Janがコメントで指摘しているように、各リモートに関連付けられている名前は、便宜上のものです。 Origin
が実際に機能しない場合は、変更できます。
Push
ステートメントの解釈に関しては、最初のものが正しいことに最も近いですが、書かれているプッシュコマンドはローカルmaster
ブランチをmaster
ブランチにプッシュします(ローカルで構成された)名前Origin
で識別されるリモート。
リモートにmaster
ブランチがない場合は、ブランチが作成されます。
プッシュコマンドとフラグ、オプションなどの詳細はもちろんドキュメントにあります 。
操作はレポジトリのコンテキストで実行されるため、「ローカル」レポジトリを明示的に参照することはほとんどありません。
いいえ、同じことを意味するものではありません。
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
にプッシュします。
それぞれが異なる名前を持つ複数のリモートを持つことができます-デフォルトの「Origin」など
あなたの質問は、あなたが現在masterブランチをチェックアウトしていると仮定しています。
git Push -u Origin master
Masterという名前のローカルブランチを、masterという名前のブランチとして「Origin」リモートにプッシュします。 -uフラグは、ローカルgitに、そのリモートブランチをローカルブランチのアップストリームとして追跡するように指示します。
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
がどこから来たのか、非常に合法的に疑問に思うかもしれません。残念ながら、これは膨大な量の混乱を招きます。今のところは、remote、branch 、およびremote-tracking branchはすべてGitで異なるものです。それらはすべてさまざまな方法で関連していますが、それらは同じではなく、用語が非常に具体的な意味。Wordtrackもオーバーロードされています。新しい用語upstreamは優れていますが、すべての説明で使用されているわけではありません。
いいえ、remote
はOrigin
の親構造です。これは、リポジトリを複製するときにGitが作成するremote
のデフォルト名にすぎません。
この質問の詳細: Gitの「起源」とは?