warning: push.default is unsetが出る件について
Hokkaido.pm Casual#12でGit(version 1.8.1)を使ったデモをした時に、
git push
で警告が出たので、自分に宿題を出して調べてみました。
警告の内容ですが、要約するとこんな感じ。
どこにプッシュするかのデフォルト値がGit 2.0で”matching”から”simple”になるから、
“git help config”して、”push.default”を検索して、
“push.default”に値を設定しちゃいなYO!(*1)
という訳なので、まず復習から。
入門Git(Amazon)の「リモートリポジトリのプッシュ定義」より、
$ git clone ../../Repo/Hello
のように、URLを指定してcloneした場合は、
どこにプッシュすべきかはclone元でいいよねってことで、
何か変更して、コミットして、プッシュするとclone元に反映される訳ですが、
その際のコマンドはこんな感じ。
$ git push origin master:master
でも、この前提として、
cloneするとclone元がoriginと名付けられて、
デフォルトのブランチ名がmasterで、
リモートのmasterをローカルに持ってきたので、
ローカルもmasterっていうブランチがあって、
なので、上記のコマンドでプッシュ出来るわけですね。
$ git push <remote name> <local branch>:<remote branch>
ローカルとリモートのブランチ名が一緒なので、
$ git push origin master
でもよくて、clone元も分かってるので、
$ git push
で良いわけですが、
このようにいろいろ省略した時に、
どういう挙動させるかの設定が”push.default”なわけですね。
結論は、警告と一緒に出ていて、
今まで通りが良いなら、
git config –global push.default matching
って書いてあるので、この通り実行すれば、
ローカルとリモートで両方に同じブランチ名があるものがプッシュされます。(*2)
ですが、ここからが重要です。
もし、masterで作業してコミットのみ行った状態で、
違うブランチに切り替えて、git push
するとします。
そして、”push.default”の値が”matching”の場合は、
masterではないブランチで作業しているにも関わらず、
ローカルとリモートで共通に存在するブランチ、
すなわちmasterがプッシュされるわけです。(*3)
これを防ぐために、Git 2.0からデフォルトの動作をsimpleにするわけですね。
というわけで、オススメはこちら。
$ git config --global push.default simple
試しに、masterじゃないブランチ上で、git push
するとプッシュに失敗して、
引数にリモート名とブランチ名を設定するとプッシュ出来ました。
ちなみに、masterをチェックアウトしてからだとgit push
は成功します。
おしまい。
(*1) 間違ってそう・・・。
(*2) 自分の解釈で書いたけど合ってるかな?
(*3) もちろん、master以外も対象です
参考にさせて貰ったページ
引数なしのgit pushは危険なので気をつけましょう – DQNEO起業日記
Leave a Comment