2016-08-08 25 views
54

git lingoでは、originremoteは同じものですか?またはoriginはローカルディレクトリを参照していますか?gitコマンドの 'origin'と 'remote'の違いは何ですか?

git push -u origin masterの場合:次の解釈はどれですか?

  1. 「『起源』とそのブランチ 『マスター』と呼ばれるリモートリポジトリへの上流のすべてを押して」
  2. 「上流 『マスター』の枝に 『起源』と呼ばれる地元の元のレポからすべてを押して」

説明が分かりました。

私の質問への回答は私のために二つの問題を明らかに:

  1. originではなく、リモートレポのローカルクローンコピーよりも、リモートレポを指します。 1は、レポのローカルコピーを暗示し、「めったに参照しない」されているので、git push -u origin masterでリモートレポを指しoriginremoteの別名であるとgit clone
  2. originの時に作成されていることを読み込むとき、これは明らかではありません。
+10

'git remote' *はコマンドですが、' git origin 'はありません。 – Bergi

+0

"そのオリジナルのエイリアスをリモートの"エイリアス "と読んだとき、あなたはその作品を誤解していた可能性が高いです。 –

+1

私は通常、原点を* a *リモコンの名前と考えています。任意の名前の複数のリモコンがあります(例:オリジン、アップストリーム、ダウンストリーム、ミラーn、ワークサーバー、ホームサーバーなどがあります。 – Toby

答えて

54

In git lingo originは、リポジトリがもともと複製されたリモートのデフォルトの名前に過ぎません。新しい用語は上流はです。同様に、sourceまたはremote1と呼ばれるか、またはremoteと呼ばれることもあります。

gitは、ピアツーピアの分散システムであり、クライアント/サーバー、マスター/スレーブ、親子関係のビルトインの概念はありません(ただし、これらはユーザーによって課される可能性があります特定のシナリオでは)。

すべてのリモコンは同じです。 originは、単純に(そして文字通り)それらの等価物のうちの最初のものです(複製されたレポに対して)。 :)

とJanがコメントで指摘するように、各リモートに関連付けられている名前は、ユーザーの便宜のために意図されます。 originがあなたのために実際には機能しないことが分かったら、それを変更することができます。 push文のあなたの解釈については

、最初に書かれたとして、正しいものに近いが、pushコマンドでは、リモート(ローカルで設定された)名前originで識別にmaster枝にローカルmasterブランチをプッシュします。

リモートにはmaster分岐が存在しない場合は、1が作成されます。

Full details of the push command and the flags, options etc are of course in the docs

あなたまれ(これまでであれば)、あなたの操作はレポのコンテキストで実行され、明示的にので、「ローカル」のレポを参照してください。

+1

"すべてのリモコンは等しいです。起源は単純に(そして文字通り)それらの等価物の中の最初のものです" - エイリアスをいつでも変更できることに注意してください。その後、原点を変更します。 –

+1

@ヤン - 良い点。私はこれを(あなたのコメントに帰属して)呼び出すための答えを更新しました。 :) – Deltics

12

あなたは複数のリモコンを持つことができ、別の名前を持つ各 - などあなたの質問はあなたが現在マスターブランチをチェックアウトした仮定を作る

デフォルトの「起源」など。

git push -u origin master 

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

2

いいえ、remoteは、originの親構造体です。これは、リポジトリのクローン作成時にGitが作成するremoteのデフォルトの名前です。この問題の

詳細情報:What is “origin” in Git?

12

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

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

originは、通常、デフォルトのリモート名はgitです。 git clone <url>を実行すると、originの名前でローカルリポジトリに自動的に<url>が追加されます。もちろん、git remote addを使用して別のリモコンを別の名前で追加することもできます。

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

デフォルトでは、git pushは、git push origin <current-branch>に対応するoriginに現在のブランチをプッシュします。

5

リモートはちょうど単語です:他のGitリポジトリをどこかで識別するための名前です。

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

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

残りの単語は、枝のペアとして(あなたが:-)をカウントする方法に応じて、正確ではない実際には正確に100%...、50%未満ですが)にまとめることができ、すべてのrefspecs、ありますコロンで区切られた名前

masterのように1つのブランチ名しか書いていない場合、Gitはこれを "上流が使用されている場合は上流を使用する"と解釈し、そうでない場合はコロンの後に同じ名前を使用します。通常、アップストリームが設定されている場合、同じ基本名を持つので、masterは通常、master:masterという意味になります。 Gitはあなたのブランチ(左の名前)のにあるリモートのURLにあるGitをコミットし、ブランチ(右の名前)を同じチップに設定するように求めますその枝のために押された。

refspecを入れないと、GitのデフォルトはGitのバージョンによって異なります。 Gitバージョン2.0以降、デフォルトではの現在のブランチをリモートの同じ名前のブランチにプッシュします。

-uフラグがプッシュが成功した場合、それはあなただけプッシュブランチのため上流を設定する必要があり、git pushを伝えます。

ブランチの上流は、リモートの名前とそのリモートのブランチの名前の2つの部分に分かれています。あなたがgit pushを与えたので、それが成功した場合、origin/mastermasterための上流を設定します暗示master:mastermasterから-thisからmasterリモートの両方の項目名はoriginだった、との分岐は、第二(ポストコロン)でした。

編集:あなたはかなり合法的に、かもしれない、/origin/master上流設定でから来たことは、部分的に歴史的なアーティファクトだ残念ながら、それは混乱の膨大な量につながる今のところ、ただ不思議。。。 リモートブランチリモートトラッキングブランチはすべてGitのさまざまなものですが、それらはすべてさまざまな方法で関連していますが、それらは同じではないことを覚えておくことが重要です非常に具体的な意味を持つ。のトラックという単語もded。

関連する問題