Successfully reported this slideshow.
Your SlideShare is downloading. ×

5分で分かるgitのrefspec

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
こわくない Git
こわくない Git
Loading in …3
×

Check these out next

1 of 25 Ad

More Related Content

Slideshows for you (20)

Viewers also liked (20)

Advertisement

Recently uploaded (20)

5分で分かるgitのrefspec

  1. 1. 5分で分かる(?)
 gitのrefspec HC勉強会 2015/02 1
  2. 2. 話すこと 2 1 2 3 4 緩いまとめ 指定による挙動の違い refspecとは何か pushとかpullのおさらい
  3. 3. pushとかpullのおさらい master branch1 branch2 local 3
  4. 4. pushとかpullのおさらい master branch1 branch2 local git clone 3
  5. 5. pushとかpullのおさらい master branch1 branch2 master originlocal 3 origin/master origin/branch1 origin/branch2
  6. 6. pushとかpullのおさらい master branch1 branch2 master originlocal ローカルブランチ この場合、masterは origin/masterを追跡する 追跡ブランチでもある (git branch -vv で確認できる) 3 origin/master origin/branch1 origin/branch2 名前がつく リモート追跡ブランチ 基本的に直接弄っちゃダメ (git branch -a で確認できる)
  7. 7. pushとかpullのおさらい master branch1 branch2 master originlocal git fetch 3 origin/master origin/branch1 origin/branch2
  8. 8. pushとかpullのおさらい master branch1 branch2 master originlocalリモートの全ローカルブランチを リモート追跡ブランチにfetchする (設定がデフォルトの場合) 3 origin/master origin/branch1 origin/branch2
  9. 9. pushとかpullのおさらい master branch1 branch2 master originlocal 3 origin/master origin/branch1 origin/branch2 (master上で) git merge
  10. 10. pushとかpullのおさらい master branch1 branch2 master originlocal 追跡ブランチにいる場合、 引数を省略すると 追跡先がマージ元となる 3 origin/master origin/branch1 origin/branch2
  11. 11. pushとかpullのおさらい master branch1 branch2 master originlocal 3 origin/master origin/branch1 origin/branch2 fetch + merge = pull
  12. 12. pushとかpullのおさらい master branch1 branch2 master originlocal git push 3 origin/master origin/branch1 origin/branch2
  13. 13. pushとかpullのおさらい master branch1 branch2 master originlocal 3 origin/master origin/branch1 origin/branch2 リモートリポジトリと リモート追跡ブランチに反映される (対象となるブランチは設定次第。後述)
  14. 14. pushとかpullのおさらい master branch1 branch2 master originlocal 3 origin/master origin/branch1 origin/branch2
  15. 15. 以上、一般的な動き。 これを踏まえて 4
  16. 16. refspec(参照仕様)とは何か 5 git origin [master..] このスライド中は origin固定で { } push pull fetch
  17. 17. refspec(参照仕様)とは何か 5 git origin [master..] ここがrefspec(複数指定可) { } push pull fetch
  18. 18. refspec(参照仕様)とは何か 5 git origin [master..] ここがrefspec(複数指定可) +<source>:<destination> { } push pull fetch 省略しない場合の書式
  19. 19. refspec(参照仕様)とは何か 5 git origin [master..] ここがrefspec(複数指定可) +<source>:<destination> 参照元 pushの場合ローカル側 pullの場合リモート側 参照先 pushの場合リモート側 pullの場合ローカル側 { } push pull fetch 省略しない場合の書式ffでなくても更新する (オプション)
  20. 20. 指定による挙動の違い 6 git fetch origin … 無指定 普通にcloneした場合、.git/configのremote.origin.fetchに +refs/heads/*:refs/remotes/origin/* というデフォルト値(*はワイルドカード)が設定されており、 これを指定したことになる。 つまりリモートリポジトリの全ローカルブランチを ローカルの同名リモート追跡ブランチにそれぞれfetchする。 <以降、このデフォルト値は弄っていない前提で記述> <ref> <ref>: と同じ。 <src>: remote.origin.fetchの設定で対応する<dst>が決まる。 (デフォルト値なら同名のリモート追跡ブランチが<dst>) 対応する設定がない場合でもFETCH_HEADは更新される。 <src>:<dst> <src>を<dst>にfetchする。 <dst>をリモート追跡ブランチにしたい場合は hoge:refs/remotes/origin/hoge のように指定する。
  21. 21. 7 git pull origin … 無指定 fetch :git fetchと同じデフォルト値が使われる。 merge:カレントブランチが追跡ブランチであれば .git/configのbranch.<name>.mergeに設定があるはず。 そこからカレントブランチに対して行われる。 (普通はリモートリポジトリの同名ブランチになっている) <ref> <ref>: と同じ。 <src>: fetch :git fetchの場合と同じ。 merge:<src>がカレントブランチにmergeされる。 refspecを複数指定した場合、 全<src>がカレントブランチにmergeされることに注意。 <src>:<dst> fetch :git fetchの場合と同じ。 merge:同上。複数指定時も含め<dst>の指定は無関係。 指定による挙動の違い
  22. 22. 8 git push origin … 無指定 remote.origin.push の設定値が使われる。無ければ push.default の設定(≠refspec)に応じた挙動となる。 push.default が明示的に設定されていない場合、 2.0以降だと「simple」が使われる。 いくつか種類があるため要理解。(ものによっては事故る) <ref> <ref>:<ref>と同じ : push.default = matching を指定した場合と同じ。 :<dst> 空の<src>を<dst>にpush、つまり リモートリポジトリの<dst>ブランチを削除する。 <dst>に対するリモート追跡ブランチも消してくれる。 試した限りremote.origin.fetchの設定を見てるっぽい。 <src>:<dst> ローカルの<src>をリモートリポジトリの<dst>にpush。 <dst>に対するリモート追跡ブランチにも反映(作られる)。 こちらも試した限り、remote.origin.fetchの設定を見て リモート追跡ブランチだと判定しているっぽい。 指定による挙動の違い
  23. 23. 緩いまとめ 9 特にpullで明示的に指定する場合、 全<src>がカレントにmergeされることに注意。 その上で、良く分からないなら refspecは無指定が無難。多分望んだ挙動になるはず。 まず自分の環境におけるpush.defaultと その挙動を理解する。明示的に設定しておくことを推奨。 Pro Gitは一回読むべき。特に「Git Internals」の章。 無指定でエラーになる場合は upstream周りの設定を見直した方が良い(と思う)。
  24. 24. 参考元・使わせてもらった素材など 10 http://www.flopdesign.com/freefont/smartfont.html cocodrips/keynote-themes man git-push, pull, fetch, config Pro Git Chapter 10.5 http://git-scm.com/book/en/v2/Git-Internals-The-Refspec スマートフォントUI
  25. 25. ご清聴 ありがとうございました 11

×