2013-03-13 4 views
50

、私は追跡参照とは何ですか?私はGitの拡張機能を経由してリモートリポジトリに新しいブランチをプッシュすると

The branch {branch name} does not have a tracking reference. Do 
you want to add a tracking reference for {branch name}? 

追跡参照は何を言ってアラートを取得しますか? Googleでの参照のトラッキングについてはほんのわずかしか記載されておらず、実際の定義はありません。

+2

スクープ用にpush -uを参照してください。 – bmargulies

+0

私がpush、pull、configのgitのmanページを正しく理解していれば、トラッキング参照は設定ファイルに追加された設定または設定で、引数なしのgit-pullによって何をプルダウンするかを指示します。私はドキュメントがちょっと混乱していると思いますが、トラッキングリファレンスは設定ファイルの以下の設定の組み合わせです:リモート。 .fetchとブランチ。 .merge。あれは正しいですか? –

答えて

21

基本的な考え方は、純粋にローカル参照(ブランチ、タグなど)があり、次にリモートレファレンス参照があり、それは他のレポで起こることに従うということです。 Gitは分散化されているので、リモートで使用されているものと同じブランチの名前を選択することができます。 Gitではこれを行うことができますが、ローカル参照もリモート参照とリンクする方法を提供します。

はたとえば、次の点を考慮します。

% git branch -a 
* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/maint 
    remotes/origin/master 
    remotes/origin/next 
    remotes/origin/pu 
    remotes/origin/todo 

は、ここでは、origin呼ばnexttodoに支店を持っています。

% git checkout -t remotes/origin/next 
Branch next set up to track remote branch next from origin. 
Switched to a new branch 'next' 
% git branch todo  

は、今、私たちはremotes/origin/todoへの変更で更新されることはありません同じ名前とローカルブランチtodoのリモートブランチを追跡するローカルブランチnextを持っています。

+0

ありがとうございます。したがって、 "参照"はブランチやタグのような単なるオブジェクトであり、 "追跡参照"はリモートリポジトリ内の対応するオブジェクトにリンクされているオブジェクトですか? –

+2

はい - これが主要なアイデアです。 "object"はGitで特別な意味を持ちます。それは.git/objectsの下に格納されているSHA1を持つものを意味するので、 "reference"よりも一般的ですが、これがアイデアです。 –

+15

Sooo、uhhhh、誰でも私たちがYESまたはNOと答えるべきかどうかをお勧めしたいですか? "マスターへのトラッキング参照を追加しますか?"実用的にはまだ混乱しています。一般に選択されているのは何ですか?どちらのオプションにも利点と欠点はありますか?誰かが「はい」と言うことができ、何も問題を引き起こすことなくそれを忘れることができますか? –

5

ニックQuarantoの優れたブログgitの準備ができてremote tracking branchesを説明する記事があります。

リモート追跡ブランチは、いくつかの異なる目的を持っている:

  • 彼らが「何をリンクするために使用していますリモコンの と比較してローカルで作業しています。

  • git pullまたはgit fetchを使用すると、変更するリモートブランチは から自動的にわかります。

  • gitステータスは、ブランチのリモートバージョンの先頭にある にあるコミットの数を認識します。

5

ローカルのgitブランチは、git pushやgit pullコマンドは、デフォルトで追跡ブランチにしてからコミットをプッシュとプルするために知っていることを意味し、リモートブランチを追跡することができます。また、git statusは現在のローカルブランチとそれがトラッキングしているリモートブランチの間のステータスを通知します。 gitリポジトリをクローンすると、gitはローカルマスターブランチにトラッキング参照を追加して、リモートマスターブランチを追跡します。新しいリモートブランチからチェックアウトすると、gitは作成したローカルブランチに追跡参照を追加して、チェックアウトしたリモートブランチを追跡します。

しかし、新しいブランチをローカルに作成し、それをリモートリポジトリにプッシュする場合、ローカルブランチに新しいリモートブランチを追跡させたい場合は、gitに明示的に伝える必要があります。ローカルブランチをリモートリポジトリにプッシュするときは、-uまたは--set-upstreamオプションを使用します。git push -u origin my-new-branch

コマンドがgit branch -vvのローカルブランチがある場合は、それがトラッキングしているリモートブランチを確認することができます。出力の例を以下に示します。この場合

b1  560eb64 Added file.txt 
    b2  560eb64 [origin/b2] Added file.txt 
    b3  b638c18 [origin/r1: ahead 1] Added file3.txt 
* master 560eb64 [origin/master] Added file.txt 

は、私たちは地元の支店 masterb1b2b3を持っています。 masterブランチは、リモートブランチは b1分岐が b2ブランチは、リモートブランチは b2呼ば追跡していると b3分岐が r1というリモートブランチを追跡している、任意のリモートブランチを追跡されていない、 masterと呼ば追跡しています。 git branch -vvには、トレースされたブランチに関連するブランチのステータスも表示されます。ここでブランチ b3は、追跡されたリモートブランチよりも1コミット前であり、他のブランチはそれぞれのリモートトラッキングブランチで最新です。

ローカルブランチを作成してリモートリポジトリにプッシュする場合、ブランチにトラッキング参照を追加するかどうかを指定しますか?通常、新しいローカルブランチをリモートリポジトリにプッシュすると、その機能を使って他の開発者と共同作業することができます。ローカルブランチにトラッキング参照を追加すると、他の人がブランチに行った変更を簡単に取り込むことができるので、ほとんどの場合、トラッキング参照を追加する必要があります。

1

はい、おそらくそれを追加します。これをコンソールで行います:gitブランチ--set-upstream-origin/master

関連する問題