5

ローカルの変更が存在するかどうかをスクリプトで確認するにはどうすればよいですか?おそらくと組み合わせてgit describe

4

4 に答える 4

9

git 1.6.6 以降、オプションgit-describeを受け入れてい--dirtyます。作業ツリーにコミットされていない変更がある場合、次のような出力が得られます。

$ git describe --dirty
1.0.2-2-g215081f-dirty
于 2011-03-03T15:15:34.910 に答える
3

次の 2 つのプロパティの両方が満たされていることを確認する必要があります。

  1. HEAD とインデックス キャッシュに違いがないこと

    git diff-index --cached HEAD

  2. インデックスと作業ツリーに違いがないこと:

    git diff-files

両方のコマンドは、--quiet違いがあるかどうかに応じて終了コードを設定するパラメーターを取ります (git 1.4 からしばらくしてから)。git 1.4 で動作させる必要がある場合は、コマンドを実行せずにコマンドを実行し、--quiet出力が生成されるかどうかを確認する必要があります。

注: git diff磁器コマンドであるため、スクリプトでは使用しないでください。代わりに上記の配管コマンドを使用してください。

私のgit_version.shスクリプトから取ったシェルコードの例:

git_dirty=yes
# git-1.4 does not understand "git-diff-files --quiet"
# git-1.4 does not understand "git-diff-index --cached --quiet HEAD"
if [ "x$($GIT diff-files)" = "x" ] && [ "x$($GIT diff-index --cached HEAD)" = "x" ]; then
    git_dirty=no
fi

git バージョン >= 1.5 を要求できる場合は、if git diff-files --quiet && git diff-index --quiet --cached HEAD; then上記の比較を置き換えることができます。

注:このソリューション (Antony の interactive とまったく同じ) は、HEAD に関連するローカルの変更git diff HEAD --quietのみを検出します。ただし、ローカル コミットもローカル変更と見なされる可能性があり、必然的に HEAD との差分には表示されません。SHA1 値を使用して、HEAD がローカルの変更ではないと見なす一連のコミットからのものかどうかを検出する必要があります。git describe

于 2010-01-01T17:46:34.803 に答える
1

git diff --quiet変更がある場合は終了ステータス 1 を返し、変更がない場合は 0 を返します。

ステージングされた変更と作業ディレクトリの間の差分が表示されることに注意してください。HEAD と作業ディレクトリの間の変更に関心がある場合は、git diff HEAD --quiet.

--quietを意味し--exit-codeます。

于 2009-12-31T13:35:09.640 に答える
0

git statusローカルの変更がない場合は、ゼロ以外のステータスで終了します。

しかし、「gitdescribeと組み合わせて」という意味がわかりません。

于 2009-12-31T13:04:45.690 に答える