なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

CI 上の Git 操作で差分があるときだけcommit したい

GitHub Actions などで、ファイルを定期的に自動生成して、 commit & push する場面がちらほらあると思います。
そのとき、適当な外部の Action を使っても良いですが、そこまででもないな......というときのためのメモ。

自動生成して commit & push する場合、こんな感じになる。

$ git add .
$ git commit -m"commit message"
$ git push origin main

ただ、自動生成ファイルに対して差分が無かった場合、コミットが失敗して GitHub Actions が失敗する。
個人的には差分が無い場合は許容したいので、次のようにすると差分がある場合だけ commit される。

$ git add .
$ git diff-index --quiet HEAD || git commit -m"commit message"
$ git push origin main

git diff でもいいのでは?と思いつつ調べてみると、 Git にはコマンド体系が 2 種類あるらしく、スクリプトなどからリポジトリの状態などを調べたい場合には Plumbing コマンドと呼ばれるものを使うと良いようです (ちなみに、普段使っている git diff などのコマンドは Porcelain コマンドと呼ばれているようです)。

ということで、メモでした。

参考: