--dirtyオプションを発見したばかりでgit describe、非常に便利なことを行う必要があるように見えます。つまりgit describe、作業ツリーがダーティな場合の出力にサフィックスを追加しますが、私のリポジトリの一部ではそうではないようです:
$ git status
# On branch 8.30
nothing to commit (working directory clean)
$ git describe --dirty
8.30rel-8-g9c1cbdb-dirty
これは、作業ディレクトリがtag に対して相対的に汚れているためではないかと考えましたが、そうではないようです:
$ git status
# On branch 1.4
nothing to commit (working directory clean)
$ git describe --tags --dirty --long
1.4rel-0-gfedfe66-dirty
Mercurialを使っhg idていたときはよく使っていましたが、デフォルトの動作は、ダーティ リポジトリに対して報告されたコミット ハッシュにサフィックスを追加するという事実が気に入っていたので、それ以来、同等のものを探していましたが、そうではありませんでした。ドキュメントを考えると、私が期待することをしているように見えます:+gitgit describe --dirty
--dirty[=<mark>] Describe the working tree. It means describe HEAD and appends <mark> (-dirty by default) if the working tree is dirty.
何--dirtyをすべきか誤解していますか、それとも正しく使用していませんか?
違いが生じた場合に備えて、すべての git リポジトリはバックミンスター経由でデプロイされるため、関連するサブモジュールはなく、ファイルシステムはnfs共有です。
更新:回避策を発見しましたが、これがどのように違いを生んでいるのかまったくわかりません。
レポで実行するgit diff --quiet HEADと、突然、git describe期待どおりに動作します。
$ git status
# On branch 8.30
nothing to commit (working directory clean)
$ git describe --dirty
8.30rel-8-g9c1cbdb-dirty
$ git diff --quiet HEAD
$ git describe --dirty
8.30rel-8-g9c1cbdb
また、リポジトリをgit describe報告しているときに、 「ローカルのコミットされていない変更、インデックスにチェックインされていません」も表示され、作業ディレクトリに各ファイルがリストされていることを発見しましたが、それらに対する差分はなく、行だけです。dirtygitk---- filename ----
さらなる更新:これは引き続き問題であるため、最終的にgit-describe-dirtyスクリプトを作成しました。これは、実行することから始まりgit describe --dirtyますが、リポジトリが汚れていることが判明した場合は、git update-index -q --refresh再試行して 2 番目の結果を取得する前に実行されます。
何百ものリポジトリを反復処理する場合git describe-dirty、リポジトリがダーティであることを最初に示すリポジトリのインデックス更新のみを使用して実行すると、git update-index -q --refresh ; git describe --dirty毎回実行する場合に比べて大幅に時間を節約できます。