145

いつか(1.6.xリリースのあたりで)gitはサブモジュール内の変更に気づきました。それは私を苛立たせるだけです:

$gitステータスベンダー| grepの変更:
#変更:ベンダー/レール(変更されたコンテンツ)
$gitdiffベンダー/
diff --git a / vendor / rails b / vendor / rails
--- a / vendor / rails
+++b/ベンダー/レール
@@ -1 +1 @@
-サブプロジェクトコミット046c900df27994d454b7f906caa0e4226bb42b6f
+サブプロジェクトコミット046c900df27994d454b7f906caa0e4226bb42b6f-ダーティ

やめてください?

編集:

わかりました、それで私は答えがあります。今、私は別の質問があります:

これを入れても~/.gitconfigいいですか?私の最初から、私はできないように見えます、そして、私はパッチをすくい取ることによって有望なものを見ませんでした。(私はまだエイリアスを作ることができると思います。)

4

9 に答える 9

198

.gitmodulesファイル内に追加されたすべてのサブモジュールに無視モードを設定する可能性さえあります。

ちょうど今日、私はこの問題に遭遇し、解決策を見つけた後すぐにブログに記事を書きました:gitサブモジュールの変更を無視する方法

その要点:

サブモジュールを追加すると.gitmodules、リポジトリのルートに名前が付けられたファイルが作成されます

.gitmodulesそのファイルに1行追加するだけです。

[submodule "bundle/fugitive"]
    path = bundle/fugitive
    url = git://github.com/tpope/vim-fugitive.git
    ignore = dirty
于 2011-04-04T18:07:14.213 に答える
77

抑制できる変更通知には2種類あります。

1つ目はuntracked content、サブモジュールに変更を加えたが、まだそれらをコミットしていない場合に発生します。親リポジトリはこれらに気づき、git statusそれに応じて報告します。

modified: modules/media (untracked content)

これらは次のように抑制できます:

[submodule "modules/media"]
   path = modules/media
   url = git@github.com:user/media.git
   ignore = dirty

ただし、これらの変更をコミットすると、親リポジトリは再び通知を受け取り、それに応じて報告します。

modified:   modules/media (new commits)

これらも抑制したい場合は、all変更を無視する必要があります

[submodule "modules/media"]
   path = modules/media
   url = git@github.com:user/media.git
   ignore = all
于 2012-09-21T09:14:39.363 に答える
59

更新:特定のサブモジュールのダーティ状態を無視するための構成パラメーターをファイルに追加する可能性については、nilshaldenwang回答を参照(および賛成)してください。.gitmodules

ignore = dirty

そのため、git 1.7.2がリリースされ、の--ignore-submodulesオプションが含まれていますstatus

差出人git help status

--ignore-submodules [= <when>]
    変更を探すときは、サブモジュールへの変更を無視します。
    <when>は、「追跡されていない」、「ダーティ」、または「すべて」のいずれかになります。
    デフォルトです。「追跡されていない」が使用される場合、サブモジュールは
    追跡されていないものだけが含まれている場合は、ダーティとは見なされません
    コンテンツ(ただし、変更されたコンテンツはスキャンされます)。
    「ダーティ」を使用すると、の作業ツリーへのすべての変更が無視されます。
    サブモジュール、に保存されているコミットへの変更のみ
    スーパープロジェクトが表示されます(これは以前の動作でした
    1.7.0)。「all」を使用すると、サブモジュールへのすべての変更が非表示になります(および
    サブモジュールの要約の出力を抑制します。
    構成オプションstatus.submodulesummaryが設定されます)。

私が欲しい値はですdirty

git status --ignore-submodules=dirty

私は怠惰なのでエイリアスを使用します:

alias gst='git status --ignore-submodules=dirty'
于 2010-07-27T05:34:00.250 に答える
20

あなたが言及しているように、パッチ gitサブモジュール:要約のためにダーティサブモジュールを無視し、ステータスは作成中です。

Git1.7.2-rc2リリースでも発表されています。

Git v1.7.2 Release Notes (draft)
================================

Updates since v1.7.1
--------------------

" git status"学習した" --ignore-submodules"オプション。

意味:

git config --global diff.ignoreSubmodules dirty

これをオプションと見なすことは、現時点で選択されているアプローチとは異なります。

ignoreこのシリーズの後で、構成オプション' 'をに追加することを計画しています.gitmodules。これは、サブモジュールごとに「all」、「dirty」、「untracked」、または「none」(デフォルト)のいずれかに設定できます。

" git diff"と" git status"は、サブモジュールごとにその構成値を使用します。
--ignore-submodule」を使用すると、このデフォルトが上書きされます(また、構成設定を上書きできるように、新しいパラメーター「none」が追加されます)。

そして、git submdule syncそのオプションが変更されるたびに「」を実行する必要がないように、.git/config最初にそれを検索したいと思います。
そこに見つからない場合は、存在する場合はから取得され.gitmodulesます。

したがって、ユーザーは設定を上書きできますが、上書きしない場合は、アップストリームで簡単に変更できます(たとえば、サブモジュール.gitignoreが更新されて「ignore=untracked」が不要になった場合は、削除できます)。また、ブランチの' 'エントリがブランチ間で異なる
場合、ブランチを切り替えるとすぐに効果があります。ignore.gitmodules


特定のサブモジュールを無視するようにgitステータス(または任意のgitコマンド)を作成する別のアプローチは、Git 2.13(2017年第2四半期)で利用できます。

git config submodule.<name>.active false

詳細については、「gitサブモジュールの新しいコミットを無視する」を参照してください。

于 2010-07-13T20:19:57.543 に答える
13

使用することもできます

% git config [--global] submodule.ignore dirty

ファイルに設定submodule.ignore = dirtyします.git/config--globalに無視フラグを設定し、~/.gitconfigすべてのリポジトリに適用します。それがなければ、それは.git/configあなたが現在いるリポジトリだけのために設定されるべきです。

これについて私が見つけることができる唯一のドキュメントはsubmodule.<name>.ignoregit-configdocsにあります。.gitmodulesファイルから〜/ .gitconfigに移動しましたが、まだ機能しています。

于 2011-08-04T02:19:40.420 に答える
7

追加する必要があります

ignore = dirty

.gitmodules

于 2011-11-28T08:03:54.797 に答える
3

私はここでこの質問にもっと詳しく答えました。

とにかく走れ

git config --global diff.ignoreSubmodules dirty

これらの変更を無視するローカル構成オプションを追加します。

于 2018-09-11T13:26:40.350 に答える
2

したがって、gitv1.7.2-rc2には私が欲しいものがあります:

$ git diff--ignore-submodules=ダーティベンダー
#出力なし
$ git status--ignore-submodules=ダーティベンダー
#ブランチ上…
コミットするものはありません(作業ディレクトリはクリーンです)

独自のgitハウツーを構築する:

# get git
git clone git://git.kernel.org/pub/scm/git/git.git git
cd git
git checkout v1.7.2-rc2

# make git. beware of setting prefix
make configure
./configure --prefix=/usr/local
make
sudo make install

# you REALLY don't want to `make doc`, use this instead
sudo make quick-install-man
sudo make quick-install-html
于 2010-07-13T20:35:57.780 に答える
1

に追加ignore = dirtyしたくない.gitmodules場合は、無視したい変更についてより選択的にしたい場合があります。

これを行うには、にパターンを追加します.git/submodule_foo/bar/info/exclude。ここsubmodule_foo/bar/で、はサブモジュールのパスです。

パターンは、追加するパターンに似ていますが.gitignore、ルートはサブモジュールディレクトリです。たとえば、このパターンはbuildサブモジュール内のディレクトリを無視しsubmodule_foo/bar/ます。

# in .git/submodule_foo/bar/info/exclude:
/build/
于 2016-04-18T10:22:55.830 に答える