こんにちは。moniplaを担当している佐藤(ま)です。
アライドでは「大佐」と呼ばれております。
最近コマンドに慣れてきて SourceTree を使わなくなってきました。
さて今回は、v2.0が出る前に ‘git push’ の ‘push.default’ 設定の挙動をおさらいをしたいと思います。
v2.0からは以下にある(git push の度に出力される)ように、’git push’ のデフォルトが ‘matching’ から ‘simple’ へ変更されるようで、現在のままにしたい人は default 設定を予め ‘matching’ に設定しておいてね、ということのようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the current behavior after the default changes, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple When push.default is set to 'matching', git will push local branches to the remote branches that already exist with the same name. In Git 2.0, Git will default to the more conservative 'simple' behavior, which only pushes the current branch to the corresponding remote branch that 'git pull' uses to update the current branch. See 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git) |
これに関して色々記事はあがっていますが、自分なりに挙動を確認したかったのでまとめてみました。
では、’git push’ の挙動を実際に設定変えながら確認してみたいと思います。
事前準備
masterとdevelopブランチを用意
※これらは最初に remote origin へ push してあります。
1 2 3 4 5 6 |
% git branch -a * develop master remotes/origin/develop remotes/origin/master |
今回確認するpush.default設定
今回は、以下の2つの設定の動作を確認してみます。
※他にもいくつかあるようですが今回は割愛します。詳しくは以下の記事が参考になります。
http://qiita.com/awakia/items/6aaea1ffecba725be601#3-7
http://qiita.com/misopeso/items/ede49b661cc7ad30528a#3-2
matching
ローカルとリモートで同一の名前のリポジトリがあれば全てpushする。
※ 現在のデフォルト
1 |
% git config --global push.default matching |
simple
current branch に追跡 branch が設定されている、かつ local と remote の branch 名が同じである場合に、追跡 branch に対して push する。
※ v2.0 でデフォルトになる予定のもの
1 |
% git config --global push.default simple |
matching の git push
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# checkout test branch % git checkout -b test # push test branch % git push -u origin test # branch 確認 % git branch -a develop master * test remotes/origin/develop remotes/origin/master remotes/origin/test # push % git push # current がどこだろうとすべてのブランチが push されます。 |
また、以下のように push した test branch などは git push で push されません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# push test branch % git push -u origin test:test2 # branch 確認 % git branch -a develop master * test remotes/origin/develop remotes/origin/master remotes/origin/test2 # push % git push # 同じ名前の remote branch がある branch が push 対象となります。 |
simple の git push
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 追跡ブランチ設定 % git push -u origin test % git branch -a develop master * test remotes/origin/develop remotes/origin/master remotes/origin/test % git push # testブランチのみpushされます。 |
1 2 |
# push する branch を指定したい場合 % git push -u origin master develop test |
simple は追跡ブランチに対して push する為、以下のようにした場合 test branch は push されません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 追跡ブランチ設定なし % git push origin test % git branch -a develop master * test remotes/origin/develop remotes/origin/master remotes/origin/test % git push fatal: The current branch test has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin test # push.default を current と設定した場合は追跡ブランチを設定しなくても push されます。 |
人それぞれで、ブランチ戦略によるところもありますが、個人的には ‘simple’(か ‘current’ )設定が使いやすいと思います。いずれにせよ、v2.0になったら default 設定が変わるので、今のうちに自分好みの push.default 設定をして慣れておくのが良いかと思います。
今回は以上になります。
アライドアーキテクツではエンジニアを随時募集しております。
興味があればぜひこちらの採用サイトからご応募ください。
よく使うであろうことをできるだけ分かりやすく発信していきます。 Gitの情報を無駄にキャッチアップしてます。