こんにちは、さるまりんです。
git
で管理しているソースコードをpull
する際、何も変更されていない時は何もせず、変更が取得できるときは何かしら特定の処理を実行したい場合がありまして、その仕組みをスクリプトで書いてみました。
こんな感じです。
#!/bin/sh
# 現在チェックアウトされているブランチは?
CUR_BRANCH=$(git branch --show-current)
# まずはfetch
git fetch
# 更新があるか
MODIFIED=$(git diff origin/$CUR_BRANCH --name-only | grep -c -e "")
echo "$MODIFIED modified."
# 更新あり
if [ "$MODIFIED" -ne 0 ]; then
# 更新があるのでgit pull
git pull
# さらに何かしたいことがあればそのコマンドはここへ
echo "do something on update"
else
# 変更なし
echo "up to date nothing to do"
fi
上のスクリプトでやっていることは以下です。
まずは現在チェックアウトしているブランチ名をgit branch --show-current
で取得します。
そして、git fetch
です。
git diff origin/$CUR_BRANCH --name-only | grep -c -e ""
で変更されているファイル名の数を取得します。CUR_BRANCH
は変数になっています。ローカルにチェックアウトされているブランチとリモートの同じブランチを比較するためにこうしています。
変更されたファイルの数は変数MODIFIED
に入っているので、それが0でなければ何かしら更新があったとしてgit pull
した後に何か処理をしたければそれを実行します。例えばnpm run build
でjs
やcss
の変更を反映したり。
変更のあるファイルの数をとる時にgrep -c -e ""
としていますが、これはすべてのファイルが対象であればwc -l
でもいいかもしれないですね。grep
でやっているのは特定のファイルが変更されている場合のみ処理を実行する時にそのファイル名のパターンを指定することができるのでこうしています。
他にもいろんなことができそうですが、これ、実は仕組みがすでに用意されていたりする?
やりたいことをやりたいようにできるのがプログラミングの良さでもあると思うので、いろいろ試していきたいと思います。
読んでくださってありがとうございました。
それではまた!