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
: 追跡されていないファイルを持つサブモジュールを「 」として表示しない署名者: サンジータ・ジェイン
-dirty
Git 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