[解決済み】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
これはどういうことでしょうか?どうすれば直るのですか?
解決方法は?
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
"
サインオフバイ:サンゲータ・ジェイン
<ブロッククオート
Git の diff では、サブモジュールのディレクトリが
-dirty
サブモジュールディレクトリに未追跡のファイルしかない場合でも
というのは矛盾しています。
git describe --dirty
(
男性
)
は、その状態でサブモジュールディレクトリで実行すると、こうなります。
作る
--ignore-submodules=untracked
のデフォルトは
git diff
(
男性
)
設定変数やコマンドラインオプションがない場合、コマンドは '
-dirty
と整合性を持たせるために、作業ツリーに未追跡ファイルがあるサブモジュールのサフィックスを
git describe --dirty
がサブモジュールの作業ツリーで実行されていることを示します。
そしてまた
--ignore-submodules=none
のデフォルトは
git status
(
男性
)
で、コミットされていない (追跡されていない) ファイルを持つサブモジュールをユーザーが削除してしまわないようにするためです。
git config
に含まれるようになりました。
マンページ
:
デフォルトでは、これは untracked に設定されており、未追跡の サブモジュールは無視されます。
オリジナルの回答(2011年)
マーク・ロングエアのブログ記事で紹介されているように Git サブモジュールの説明 ,
<ブロッククオートバージョン1.7.0以降のgitには うざい変更 は、git submodule の動作に影響を与えます。
サブモジュールは、変更されたファイルや追跡されていないファイルがある場合、ダーティとみなされるようになりました。 以前はサブモジュールの HEAD が間違ったコミットを指している場合のみでしたが。
プラス記号の意味(
+
) の出力が変更されました。初めてこれに遭遇したときは、何が問題なのかを理解するのに少し時間がかかります。たとえば、変更履歴を調べたり git.git の git bisect を使って変更箇所を探したりするのです。 指定されたバージョンではあるが、ダーティである」ことを示す別のシンボルを導入した方が、ユーザーにとってずっと親切だったのではないでしょうか。
で直せます。
-
親リポジトリに戻る前に、各サブモジュール内の変更/進化をコミットするか元に戻すか、どちらかを行ってください (ここで diff はもう "dirty" ファイルを報告しないはずです)。 サブモジュールの変更をすべて取り消すには、単に
cd
をサブモジュールのルートディレクトリに移動し、次のようにします。git checkout .
ドットネットカーペンター
コメント
ができること。
git submodule foreach --recursive git checkout .
-
または
--ignore-submodules
にgit diff
を一時的に無視するために、これらの "dirty" サブモジュールを使用します。
Git バージョン 1.7.2 の新機能
として ノーム 以下コメント , この質問 は、git バージョン 1.7.2 以降、ダーティなサブモジュールを無視できるようになったことを述べています。
git status --ignore-submodules=dirty
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] git rebase の取り消し
-
[解決済み] コミットに含まれるすべてのファイルを一覧表示するにはどうすればよいですか?
-
[解決済み] git に自分の好きなエディタを使わせてコミットするにはどうしたらいいですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】Gitでコミットをチェリーピックするというのはどういう意味ですか?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ファイルのアンリンクに失敗しました。もう一度試してみるべきですか?
-
[解決済み】なぜ「git commit」は私の変更を保存しないのですか?
-
[解決済み】GitHub: クローンには成功したが、チェックアウトに失敗した
-
gitアップロードの共通エラー処理
-
[解決済み] git rebase: "error: cannot stat 'file': パーミッションが拒否されました"
-
[解決済み] git initを2回実行すると、リポジトリが初期化されますか?それとも既存のリポジトリを再初期化しますか?
-
[解決済み] GitHubです。パーミッションが拒否されました (公開鍵)。
-
[解決済み] すべてのgitサブモジュールの最新版を簡単にプルする方法
-
[解決済み] git サブモジュールに加えた変更を元に戻すにはどうすればよいですか?
-
[解決済み] Git: 'modified content' /dirty サブモジュールのエントリを status や diff などで表示させないようにできますか?