⬆️
コミットし忘れて、うっかりpushしてしまうのを防ぐ
背景
この記事のように、pre-pushの時に、lintのチェック処理を入れるようにして使っていると、
ローカルでlinterが修正してくれるんですが、その修正はコミットされてないので、未コミットのまま、すり抜けてpushしてしまうという問題がありました。
なので、作業中のファイルがあった場合は、pushを続行するかを聞いてくるものを、pre-pushに実装しようと思いました。
作ったもの
pre-push
#!/bin/sh
# ステージングされていない変更を確認
if git status --porcelain | grep '^??\|^ M\|^MM\|^AM\|^A '; then
echo "ステージングされていない変更があります。プッシュを続行しますか? [y/n]" > /dev/tty
read -r ans < /dev/tty
if [ "$ans" != "y" ]; then
echo "プッシュを中止しました。" > /dev/tty
exit 1
fi
fi
これで、pushする際に、コミット忘れに気づきやすくなりました。
補足
linterの実行と組み合わせるとpre-pushはこんな感じになります。
pre-push
#!/bin/sh
# ステージングされていない変更を確認
if git status --porcelain | grep '^??\|^ M\|^MM\|^AM\|^A '; then
echo "ステージングされていない変更があります。プッシュを続行しますか? [y/n]" > /dev/tty
read -r ans < /dev/tty
if [ "$ans" != "y" ]; then
echo "プッシュを中止しました。" > /dev/tty
exit 1
fi
fi
# ktlint を実行してコードスタイルの問題をチェック
if ! ./gradlew ktlint; then
# 問題が見つかった場合、自動修正を試みる
./gradlew ktlintFormat
exit 1
fi
exit 0
Discussion