シアトル生活はじめました

20年以上すんだ東海岸から西海岸に引っ越してきました。MicrosoftのUniversal Storeで働いてます。

Git のトラッキングブランチ(追跡ブランチ)がよく分からない時に読んでね

Git のトラッキングブランチ(追跡ブランチ)っていったいなんなのよ、って話。

ラッキングブランチは有効か無効か?

まずはトラッキングブランチが「有効な場合(左)」と「有効で無い場合(右)」の git pull コマンドのアウトプットを眺めてみよう。

f:id:watanabe_tsuyoshi:20151009104950p:plain

有効な場合(左)はGitが察してくれて、ちゃんと pull してくれる。

有効で無い場合(右)はGitが「は?」って感じになって、何もしてくれない。

Gitが察してくれるのはどこかにその情報があるから。

ラッキングブランチの情報はどこに保存されてる?

じゃぁどこにその情報があるのかというと、.git\config ファイルの中にある。

f:id:watanabe_tsuyoshi:20151009105650p:plain

やはり、左は有効で右は有効で無い状態。

白でハイライトした部分があるかどうか、それが違い。

その部分をよく見てみよう。

[branch "develop"]
 remote = origin
 merge = refs/heads/develop

これはGitの立場に立って言うと「作業ブランチが develop の時に pull 命令が出たときは、origin という名前の レポジトリから fetch をして、さらに refs/heads/develop で指定されるブランチから merge しますよ」

といった感じになる。

この部分がない時、Git は「pullしろって言われても情報が足りなくて出来ません(汗)」っと返答してくるわけです。

じゃぁ有効するには?

git branch コマンドの --set-upstream-to オプションを使います。

upstream(上流)をセットする、というわけです。

可視化すると、トラッキングされていないブランチは本流に繋がっていない独立した「川」みたいなもの。それを「本流」に繋げる作業が --set-upstream-to であって、本流を指定することで「独立した川」が「支流」になり、本流から支流に流れ込ませるのが pull ということになりますか・・・

f:id:watanabe_tsuyoshi:20151009112252p:plain

このように新たに [branch "develop"] というブロックが設定ファイルに加えられました。

「本流」設定完了。