[Git] git/hooks/post-commitで、commitしたら自動でリモートにPushする

October 1, 2014

ソースコードコミットしたらBitbucketに自動プッシュさせたい。

コミットログとかrebaseとかにあまりこだわらない人向け。

確認箇所

  • push.defaultは設定されているか、Gitのバージョンはいくつか
  • 対象となる作業ブランチは目的のリモートブランチにupstream setされているか
  • git ls-remoteはできるか
  • .git/hooks/post-commitは設定されているか

push.defaultは設定されているか、Gitのバージョンはいくつか

version 1.7.11以降ならpush.default simpleに。

そうでなければpush.default upstreamにしておく。

コマンド

git config --global push.default simple
git config --global push.default upstream

別に--globalでなくてもよい。

対象となる作業ブランチは目的のリモートブランチにupstream setされているか

ローカルで先行してブランチ作って開発していた場合upstreamが設定されていない。

これに気づかず少し時間を食った。

ローカルブランチとリモートブランチを関連付ける

ローカルからみたUpstream先を「追跡ブランチ」と言うらしい。知らなかった…。

追跡ブランチ設定をしたいローカルにチェックアウトし、その後のgit branch -uで、追跡したい先のブランチ名をリモートリポジトリの名前も含めて引数に指定する。

git checkout local-branch
git branch -u origin/remote-branch

普通はUpstreamが設定されてないだけでlocal-branchremote-branchは同じ名前のブランチだと思う。

.git/hooks/post-commitは設定されているか

post-commit

最初はファイルがないと思うのでcpして作る。

cd .git/hooks/
cp post-commit.sample post-commit
vim post-commit

処理したい内容を書けばいい。リモートにPushしたいだけなら、

git --git-dir=.git push origin

でいい。set upstreamしておけば大丈夫だけど、意図しないリモートサーバに送るというのはすごく困るので、いちおうorigin指定まではしておく。

commitしてもpushされないときは

だいたいfatal:no upstreamと出てるのでgit branch -uを行う。

Bitbucketにパス無しでPushしたいのにできない

むしろコレでかなり時間食った。

結局ssh-keygenとデプロイ鍵登録によるssh://プロトコルは諦め、https://を使ってremote url内にusername:passwordを挿入することにした。

パスワード平文で書いてあるのでかなりソワソワする。

git remote set-url origin https://username:password@bitbucket.org/teamname/projectname.git

誰かBitbucketに鍵認証でDeployするにはどうすればいいか教えてください…。



Recent blog posts



(c) Copyright 2023 Kotaro Yoshimatsu