Git:status、diffなどの「変更されたコンテンツ」/ダーティサブモジュールエントリのリストを抑制できますか?


123

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

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

やめてください。

編集:

わかりましたので、私は答えを持っています。今私は別の質問があります:

これ入れても~/.gitconfigいい?私のイニシャルからは、私はできないように見え、パッチをスキミングすることによって有望なものは何も見当たりませんでした。(私はまだエイリアスを作ることができると思います。)


2010年6月の日付について、これに関するgitメーリングリストにいくつかのパッチが表示されます。(google for 'git "--ignore-submodules = dirty"')
kch

メッセージが発生する理由を説明するための+1!
dotancohen 2014年

回答:


175

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

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

その要点:

サブモジュールを追加する.gitmodulesと、リポジトリのルートにという名前のファイルがあります

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

[submodule "bundle/fugitive"]
    path = bundle/fugitive
    url = git://github.com/tpope/vim-fugitive.git
    ignore = dirty

5
+1、しかし私はあなたのブログ投稿の主要な部分をSOへの回答に含めました:SOダンプがブログスタックを介して永久に存続するSO回答:blog.stackoverflow.com/2009/とは対照的に、外部リンクは1日無効になる可能性があります06 /…
VonC、2012

5
git status期待どおりに機能する前に、.gitmodulesファイルをコミットする必要があることがわかりました。また、少なくとも1.7.4以上が必要だと思います。
aleemb 2012

以下の場合は.gitignore、ファイルと呼ばれる民間のバージョンがあるexcludeに位置して、.git/info/取り扱わバージョンではありません。ファイルに対応するファイルはあり.gitmodulesます.gitmodulesか?これにより、変更を加えずに、親リポジトリのインスタンスでのみサブモジュールの変更を抑制できますか?
HelloGoodbye 2015

2
ブランチを追跡するサブモジュールでこれを機能させることはできません。そのためサポートされていませんか?`` `[submodule" smstack / ansible / hosts "] path = smstack / ansible / hosts url = https:// ... branch = master ignore = dirty` `` `` `
Marc Abramowitz

1
@MarcAbramowitz私は私が思う同じ問題に偶然遭遇しました-これに対する解決策を見つけましたか?
Sebastian G. Marinescu 2017

61

抑制できる変更通知には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

2
以下の場合は.gitignore、ファイルと呼ばれる民間のバージョンがあるexcludeに位置して、.git/info/取り扱わバージョンではありません。ファイルに対応するファイルはあり.gitmodulesます.gitmodulesか?これにより、変更を加えずに、親リポジトリのインスタンスでのみサブモジュールの変更を抑制できますか?
HelloGoodbye 2015

1
HelloGoodbye:.git / modules / $ MODULENAME /を確認すると、そのモジュールの.gitディレクトリのように見えます。その場所のinfo / excludeファイルを変更すると、ジョブが実行されます。
PaulW 2015年

1
ignore = all一部は便利です。
Eric Wang

53

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

ignore = dirty

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

からgit help status

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

私が欲しい値はdirtyです。

git status --ignore-submodules=dirty

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

alias gst='git status --ignore-submodules=dirty'

2
これは受け入れられる回答なので、ここのファイルのignore=dirty個々のエントリに追加するオプションも追加する必要があると思います.gitmodules
Andriy Drozdyuk、2012

14

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

Git 1.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、構成オプション ' 'をに追加することを計画しています。これは、各サブモジュールに対して「すべて」、「ダーティ」、「未追跡」、または「なし」(デフォルト)のいずれかに設定できます。

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サブモジュールの新しいコミットを無視する」を参照してください。


gitconfigビットで質問を更新しました。答えがわかっている場合は、pingを実行するだけです。
kch 2013

@kch:この種の設定を保存するために現在提案されているアプローチで回答を更新しました。
VonC 2010

@drozzy:他のコメントで述べたように: " ignore = dirty"
VonC

1
@drozzy:追加の構成パラメーター "ignore = dirty"を使用してnilshaldenwangの回答を賛成して完了しました。公式回答を編集し、nilshaldenwangの投稿へのリンクを追加しました。
VonC、2012

おかげで、個人的なことは何もありませんでしたが、私は最初に見逃した、より有用な回答を上に望んでいました!
Andriy Drozdyuk、2012

11

あなたも使うことができます

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

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

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


@PawełGościckiGit 2.0.0で動作することを確認できます。
Ciro Santilli郝海东冠状病六四事件法轮功

6

追加する必要があります

無視=汚い

.gitmodules


.gitmodulesのどこに追加しますか?
Andriy Drozdyuk、2012

@drozzy「パス」と「URL」の値が定義されている、無視する各サブモジュールのセクションの下に追加します。
jsdalton 2012

2

だからgit v1.7.2-rc2には私が欲しいものがあります:

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

独自のgit howtoを作成する:

# 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

1
ここでは7 gitsを数えます:git clone git://git.kernel.org/pub/scm/git/git.git git
dotancohen 2014年

2

ここでこの質問に詳しく答えました。

とにかく走れ

git config --global diff.ignoreSubmodules dirty

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


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/

3
これにより、サブモジュール内でも変更が非表示になると思います。サブモジュールの外にいるときのみ変更を非表示にします。彼らが中にいるとき、私がサブモジュールに積極的に取り組んでいるときにそれらが表示されても問題ありません。
ラファエルシュヴァイケルト2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.