Git: can I suppress listing of 'modified content'/dirty submodule entries in status, diff, etc? Git: can I suppress listing of 'modified content'/dirty submodule entries in status, diff, etc? git git

Git: can I suppress listing of 'modified content'/dirty submodule entries in status, diff, etc?


There is even a possibility to set the ignore mode for every added submodule within the .gitmodules file.

Just today I encountered this problem and immediately wrote an article in my blog about it after finding a solution: How to ignore changes in git submodules

The gist of it:

Once you added a submodule there will be a file named .gitmodules in the root of your repository

Just add one line to that .gitmodules file:

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


There are two kinds of change notices you can suppress.

The first is untracked content which happens when you make changes to your submodule but have not yet committed those. The parent repository notices these and git status reports it accordingly:

modified: modules/media (untracked content)

You can suppress these with :

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

However, once you commit those changes, the parent repository will once again take notice and report them accordingly:

modified:   modules/media (new commits)

If you want to suppress these too, you need to ignore all changes

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


Update: See (and upvote) nilshaldenwang's answer regarding the possibility to add to the .gitmodules file a config parameter for ignoring dirty state of a given submodule.

ignore = dirty

So git 1.7.2 is out and includes the --ignore-submodules option for status.

From git help status:

--ignore-submodules[=<when>]    Ignore changes to submodules when looking for changes.    <when> can be either "untracked", "dirty" or "all", which    is the default. When "untracked" is used submodules are    not considered dirty when they only contain untracked    content (but they are still scanned for modified content).    Using "dirty" ignores all changes to the work tree of    submodules, only changes to the commits stored in the    superproject are shown (this was the behavior before    1.7.0). Using "all" hides all changes to submodules (and    suppresses the output of submodule summaries when the    config option status.submodulesummary is set).

The value that I want is dirty.

git status --ignore-submodules=dirty

I use an alias because I'm lazy:

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