web-dev-qa-db-ja.com

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

いつか(1.6.xリリース前後)、gitはサブモジュール内の変更を認識しました。それは私を悩ますだけです:

 $ git status vendor grep変更:
#変更:ベンダー/レール(変更されたコンテンツ)
 $ git diff vendor /
 diff --git a/vendor/Rails b/vendor/Rails 
 --- a/vendor/Rails 
 +++ b/vendor/Rails 
 @@ -1 +1 @@ 
-Subproject commit 046c900df27994d454b7f906caa0e4226bb42b6f 
 + Subproject commit 046c900df27994d454b7f906caa0e4226bb42b6f-dirty [.____ .. dirty 

停止させてください?

編集:

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

これを~/.gitconfigに入れることはできますか?私の最初から、私にはできないようであり、パッチをスキミングすることで有望なものは見られませんでした。 (まだエイリアスを作成できると思います。)

117
kch

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

ignore = dirty

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

git help statusから:

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

必要な値はdirtyです。

git status --ignore-submodules=dirty

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

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

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

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

その要点:

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

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

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

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

最初は_untracked content_です。これは、サブモジュールに変更を加えたが、それらをまだコミットしていない場合に発生します。親リポジトリはこれらに気づき、それに応じて_git status_が報告します。

modified: modules/media (untracked content)

これらを抑制するには:

_[submodule "modules/media"]
   path = modules/media
   url = [email protected]:user/media.git
   ignore = dirty
_

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

_modified:   modules/media (new commits)
_

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

_[submodule "modules/media"]
   path = modules/media
   url = [email protected]:user/media.git
   ignore = all
_
55
aleemb

あなたが言及したように、パッチ 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に追加する予定です。これは、各サブモジュールに「all」、「dirty」、「untracked」または「none」のいずれかに設定できます(デフォルト)。

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

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

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


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

git config submodule.<name>.active false

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

13
VonC

使用することもできます

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

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

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

10
kjell_

追加する必要があります

無視=汚い

.gitmodulesへ

6
Roman

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

 $ git diff --ignore-submodules = dirty vendor 
#no output 
[。

独自の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
2
kch

私はこの質問に答えました here .

ただ走れ

git config --global diff.ignoreSubmodules dirty

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

1
Devpool

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

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

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

# in .git/submodule_foo/bar/info/exclude:
/build/
1
Flimm