作業ブランチ切ったら,最初に git commit --allow-empty -m "[WIP]"
してプルリク作ってから作業を始めたい
でもこのWIPコミットを消し忘れると後々はずかしいおもいをするので,教えてくれる君をつくった
tl;dr
~/.git_template/hooks/pre-commit
#!/bin/bash
if git log -1 --oneline --pretty=format:'%s' | grep -q -e '^\[WIP\]'
then
last_commit=`git log -1 --date=raw --pretty=format:"%ad"`
current_commit=$GIT_AUTHOR_DATE
if echo "$current_commit" | grep -q -v "$last_commit"
then
echo "last commit is wip commit!!"
exit 1
fi
fi
ぜんてい
Git Hooks の pre-commit にコミットを hook した時の処理を記述する
参考: gitのhooksを管理する(自分用テンプレートを使う)
ほうしん
- 直前のコミットのコミットメッセージが
[WIP]
ではじまってて - hook したコミットが amend してなかったら
- アラートだして
exit 1
する
1. 直前のコミットのコミットメッセージ
$ git log -1 --oneline --pretty=format:'%s' | grep -e '^\[WIP\]'
--prety=format
のあたりは git logのフォーマットを指定する を参考に
2. amendしてるかどうか
amend すると, hook したコミットの author date は直前のコミットの author date になるので,2つが一致しているかどうかをみます
直前のコミットの author date
前項を参考に
$ git log -1 --date=raw --pretty=format:"%ad"
1491989538 +0900
hook したコミットの auther date
GIT_AUTHOR_DATE でもってこれます
が,これをechoしてみると,
.git/hooks/pre-commit
#!/bin/bash
echo $GIT_AUTHOR_DATE
exit 1
$ git commit --allow-empty -m "hoge"
@1491995878 +0900
文頭に @
がついてしまっているので, 比較ではなく grep
をつかいます
last_commit=`git log -1 --date=raw --pretty=format:"%ad"`
current_commit=$GIT_AUTHOR_DATE
echo "$last_commit" | grep -q -v "$current_commit"
3. exit 1
する
します
if echo "$current_commit" | grep -q -v "$last_commit"
then
echo "last commit is wip commit!!"
exit 1
fi