技術的には、Git リポジトリには実際には「リモート」のものはまったくありません1。別の異なるリポジトリの名前に対応する必要があるローカル名だけがあります。名前origin/whatever
が付けられたものは、最初はクローン元のレポのものと一致します。
git clone ssh://some.where.out.there/some/path/to/repo # or git://some.where...
他のリポジトリのローカル コピーを作成します。途中で、そこにあったすべてのブランチと、それらが参照するコミットを記録し、名前の下にそれらをローカル リポジトリに貼り付けますrefs/remotes/origin/
。
git fetch
「some.where.out.thereの私のコピー」を更新する前に、または同等のものをどれだけ前に行ったかに応じて、ブランチが変更され、新しいブランチが作成され、一部が削除される場合があります。あなたがgit fetch
(またはgit pull
実際にはフェッチとマージである)行うと、リポジトリは新しい作業のコピーを作成し、必要に応じてすべてのrefs/remotes/origin/<name>
エントリを変更します。すべてが一致するのは、その ingの瞬間ですfetch
(まあ、それと最初のクローン、およびいくつかのpush
ing のケースも - 基本的に Git がチェックする機会を得たときはいつでも - ただし、以下の警告を参照してください)。
Git では通常、自分自身refs/heads/<name>
を just<name>
と呼び、リモートのものをorigin/<name>
と呼びます。どれがどれであるかが明らかであるため、すべてが機能します。自明なブランチ名を作成することは時々可能ですが、それが起こるまで心配する必要はありません。:-) Git にわかりやすい最短の名前を付けるだけで、そこから移動できます: origin/master
「前回チェックしたときに master があった場所」とmaster
「私が行ったことに基づいて、master がここにいた場所」です。 . 必要に応じて実行git fetch
して、「マスターがそこにある場所」で Git を更新します。
警告: 1.8.4 より古いバージョンの Git にgit fetch
は、「マスターがそこにある場所」を更新しないモードがいくつかあります (より正確には、リモート追跡ブランチを更新しないモード)。git fetch origin
、またはgit fetch --all
、または単にgit fetch
を実行すると、更新されます。ランニングgit fetch origin master
はしません。残念ながら、この「更新しない」モードは通常の によってトリガーされgit pull
ます。(これは主に小さな煩わしさであり、Git 1.8.4 以降で修正されています。)
1さて、 「リモート」と呼ばれるものがあります。でもそれもローカル!名前origin
は、Git が「リモート」と呼ぶものです。基本的には、クローンを作成したときに使用した URL の短い名前です。origin
インのorigin/master
由来でもあります。この名前origin/master
はリモート トラッキング ブランチと呼ばれ、特に古いドキュメントや非公式のドキュメントでは、「リモート ブランチ」と短縮されることがあります。