1. ホーム
  2. ギット

[解決済み】ローカルのGitリポジトリが変更されたかどうかをBashスクリプトで確認するにはどうすればよいですか?

2022-04-21 02:03:13

質問

変更点をチェックすると正しく動作しないスクリプトがあります。

こんな感じでやってみました。

VN=$(git describe --abbrev=7 HEAD 2>/dev/null)

git update-index -q --refresh
CHANGED=$(git diff-index --name-only HEAD --)
if [ ! -z $CHANGED ];
    then VN="$VN-mod"
fi

最後のコミット以降に変更があったかどうかをブール値でチェックする方法はありますか?あるいは、ローカルリポジトリに新しい変更があったかどうかを実際にテストする方法はありますか?

私は、(ここのどこかで見つけた)バージョン作成スクリプトのために、このすべてをやっています。

どのように解決するのですか?

あなたがやっていることはほとんどうまくいきます。 $CHANGED が空の場合、そして -z は、空であることをテストする、つまり変更がないことを意味します。あなたが言いたかったのは

if [ -n "$CHANGED" ]; then
    VN="$VN-mod"
fi

Gitの引用 GIT-VERSION-GEN :

git update-index -q --refresh
test -z "$(git diff-index --name-only HEAD --)" ||
VN="$VN-dirty"

それをコピーしていたように見えますが、その引用のディテールを忘れていただけなのです。

もちろん、このままでもいいのですが。

if git diff-index --quiet HEAD --; then
    # No changes
else
    # Changes
fi

あるいは、「何かが変わった」というケースだけを気にするのであれば。

if ! git diff-index --quiet HEAD --; then
    VN="$VN-mod"
fi

使用方法 --quiet は、Git がひとつの diff に遭遇するとすぐに処理を停止することができるという利点があるので、ワークツリー全体をチェックする必要はないかもしれません。