Git diff でサブプロジェクトがダーティだと表示される 質問する

Git diff でサブプロジェクトがダーティだと表示される 質問する

git diffを実行したところ、約10個のサブモジュールすべてについて次の出力が得られました。

diff --git a/.vim/bundle/bufexplorer b/.vim/bundle/bufexplorer
--- a/.vim/bundle/bufexplorer
+++ b/.vim/bundle/bufexplorer
@@ -1 +1 @@
-Subproject commit 8c75e65b647238febd0257658b150f717a136359
+Subproject commit 8c75e65b647238febd0257658b150f717a136359-dirty

これはどういう意味ですか? どうすれば修正できますか?

ベストアンサー1

10年後の2021年1月更新:

git diff) は、サブモジュールコミットとして、追跡されていない不要な部分を含むサブモジュール作業ツリーを示しました<objectname>-dirtyが、当然の予想としては、" -dirty" インジケーターは "git describe --dirty)では、作業ツリーに追跡されていないファイルがあることをダーティネスの原因として考慮しません。
この不整合は Git 2.31 (2021 年第 1 四半期) で修正されました。

見るコミット 8ef9312(2020年11月10日)サンジータ・ジェイン(sangu09(合併者
ジュニオ・C・ハマノ -- gitster--コミット 0806279、2021年1月25日)

diff-dirty: 追跡されていないファイルを持つサブモジュールを「 」として表示しない

署名者: サンジータ・ジェイン

-dirtyGit diffは、サブモジュールディレクトリに未追跡のファイルしかない場合でも、サブモジュールディレクトリをevenとして報告します。
これは、git describe --dirty) は、その状態でサブモジュール ディレクトリで実行すると表示されます。

--ignore-submodules=untrackedデフォルトにするgit diff) は、構成変数またはコマンドラインオプションがない場合に、-dirty作業ツリーに追跡されていないファイルがあるサブモジュールにコマンドが ' ' サフィックスを付与しないようにし、サブモジュールの作業ツリーで実行されるものと一貫性を保つようにしますgit describe --dirty

また、--ignore-submodules=noneデフォルトとしてgit status) を使用すると、コミットされていない (追跡されていない) ファイルを持つサブモジュールをユーザーが削除してしまうことがなくなります。

git config今ではマニュアルページ:

デフォルトでは、これは untracked に設定されており、追跡されていないサブモジュールは無視されます。


元の回答 (2011)

マーク・ロンゲールのブログ記事で述べたようにGit サブモジュールの説明

gitのバージョン1.7.0以降には、迷惑な変更git サブモジュールの動作。
サブモジュールは、変更されたファイルや追跡されていないファイルがある場合にダーティとみなされるようになりましたが、以前はサブモジュールの HEAD が間違ったコミットを指している場合にのみダーティとみなされていました。

git サブモジュールの出力のプラス記号 ( ) の意味+が変わりました。初めてこれに遭遇したときは、何が間違っているのか把握するのに少し時間がかかります。たとえば、変更ログを確認したり、git.git で git bisect を使用して変更を見つけたりする必要があります。「指定されたバージョンだが、ダーティ」を表す別の記号を導入した方が、ユーザーにとってずっと親切だったでしょう。

次の方法で修正できます:

  • 親リポジトリに戻る前に、各サブモジュール内の変更/進化をコミットまたは元に戻します(親リポジトリでは、差分は「ダーティ」ファイルを報告しないはずです)。サブモジュールへのすべての変更を元に戻すには、cdサブモジュールのルートディレクトリで次のようにします。git checkout .

ドットネットカーペンター コメント次の操作を実行できます。git submodule foreach --recursive git checkout .

  • または、--ignore-submodulesを追加してgit diff、これらの「ダーティ」サブモジュールを一時的に無視します。

Git バージョン 1.7.2 の新機能

としてノアム 下記にコメントこの質問git バージョン 1.7.2 以降では、次のようにダーティ サブモジュールを無視できると述べています。

git status --ignore-submodules=dirty

おすすめ記事