いつか(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
に入れることはできますか?私の最初から、私にはできないようであり、パッチをスキミングすることで有望なものは見られませんでした。 (まだエイリアスを作成できると思います。)
更新:特定のサブモジュールのダーティー状態を無視するための.gitmodules
ファイルに構成パラメーターを追加する可能性について nilshaldenwang の answer を参照してください。
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'
.gitmodulesファイル内に追加されたすべてのサブモジュールに対して無視モードを設定する可能性もあります。
ちょうど今日、私はこの問題に遭遇し、解決策を見つけてすぐにブログで記事を書きました: gitサブモジュールの変更を無視する方法
その要点:
サブモジュールを追加すると、リポジトリのルートに
.gitmodules
という名前のファイルが作成されます
その.gitmodules
ファイルに1行追加するだけです:
[submodule "bundle/fugitive"]
path = bundle/fugitive
url = git://github.com/tpope/vim-fugitive.git
ignore = dirty
抑制できる変更通知には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
_
あなたが言及したように、パッチ 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サブモジュールの新しいコミットを無視する 」を参照してください。
使用することもできます
% git config [--global] submodule.ignore dirty
submodule.ignore = dirty
ファイルに.git/config
を設定します。 --global
は、~/.gitconfig
に無視フラグを設定し、すべてのリポジトリに適用します。それがなければ、あなたが現在いるレポだけのために.git/config
で設定する必要があります。
これで見つけることができる唯一のドキュメントは、 git-config docs のsubmodule.<name>.ignore
です。 .gitmodulesファイルから〜/ .gitconfigに移動しましたが、まだ機能しています。
追加する必要があります
無視=汚い
.gitmodulesへ
$ git diff --ignore-submodules = dirty vendor #no output
[。
# 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
私はこの質問に答えました here .
ただ走れ
git config --global diff.ignoreSubmodules dirty
これらの変更を無視するローカル設定オプションを追加します。
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/