--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
ていたときはよく使っていましたが、デフォルトの動作は、ダーティ リポジトリに対して報告されたコミット ハッシュにサフィックスを追加するという事実が気に入っていたので、それ以来、同等のものを探していましたが、そうではありませんでした。ドキュメントを考えると、私が期待することをしているように見えます:+
git
git 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
報告しているときに、 「ローカルのコミットされていない変更、インデックスにチェックインされていません」も表示され、作業ディレクトリに各ファイルがリストされていることを発見しましたが、それらに対する差分はなく、行だけです。dirty
gitk
---- filename ----
さらなる更新:これは引き続き問題であるため、最終的にgit-describe-dirty
スクリプトを作成しました。これは、実行することから始まりgit describe --dirty
ますが、リポジトリが汚れていることが判明した場合は、git update-index -q --refresh
再試行して 2 番目の結果を取得する前に実行されます。
何百ものリポジトリを反復処理する場合git describe-dirty
、リポジトリがダーティであることを最初に示すリポジトリのインデックス更新のみを使用して実行すると、git update-index -q --refresh ; git describe --dirty
毎回実行する場合に比べて大幅に時間を節約できます。