git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git diff --numstat <branch> always shows dirty submodules

From
GNGelonida N <gelonida@gmail.com>
Date
Nov 13, 2011, 00:45 UTC
Message-ID
<j9n3v5$ncj$1@dough.gmane.org>
In-Reply-To
<4EBED0ED.7060005@web.de>
Hi Jens,
Thanks a lot for your answer.
On 11/12/2011 09:02 PM, Jens Lehmann wrote:
Show 13 quoted lines
> Am 12.11.2011 14:29, schrieb Gelonida N:
>> I recently started using submodules and they behave mostly as I like to.
>> Normally I use diff --numstat<branch>
>> to check quickly whether I am aligned with another branch or not.
>> . . . 
>> Is there any quick way flag / helper script / . . .
>> to show differences between two branches without raising the fact, that
>> submodules are dirty?
> 
> Yes, there is the "--ignore-submodules" command line option and the
> diff.ignoreSubmodules (which can be set globally and/or per repo) and
> submodule.<name.>ignore configuration settings. They can be set to
> "untracked", "dirty" or "all" to control what you want to see.

I tried this immediately and at works perfectly for git diff. Please see also my comments at the end of this post

Show 5 quoted lines
> 
> Did you check areas in the Documentation where you did expect to find
> them mentioned but they weren't? Then please say so that we can fix
> that.
> 

Apologies. My bad. I must have read the output of git help diff too quickly. It is there plain as the day. :-(

Show 7 quoted lines
>>> From a user perspective I don't see why this is reported.
>> I am not being warned about dirty files in the top level repository
> 
> This is so you can't forget to add new files inside the submodule,
> which can lead to breakage when other people clone the superproject
> but won't get the new files from the submodule because you didn't
> commit them there.

Well I wouldn't expect to find this kind of info (by default) in the output of a git-diff.

If you git-diff two branches of a project without submodules it doesn't tell you either, that you have untracked files in the repository.

I would have expected this kind of output just as result of 'git status' (as it is already today) # modified: submodule (untracked content)

Git status reports untracked files in the super project AND in it reports, that there are untracked files in the submodule. So this seems to be more consistent to me than the diff case.

On the other hand I would consider it usefult if git status could optionally report the complete list of untracked files also for the submodules (So far I didn't search in depth in doc whether there is a switch for it.)

A first shot was reading the output of git help status:
>       If status.submodulesummary is set to a non zero number or true (identical to -1 or an unlimited number), the
>        submodule summary will be enabled for the long format and a summary of commits for modified submodules will
>        be shown (see --summary-limit option of git-submodule(1)).
I put thus following lines in .git/config of my repository
status]
    submodulesummary = true
 but the untracked files of my submodule were not reported. (will follow
the doc of git-submodule)

What is also confusing to me is, that the setting diff.ignoreSubmodules is also being used by git status.

There seems to be no variable status.ignoreSubmodules

So it seems impossible (without aliases) to have git diff NOT report the untracked files, but git status report them.

I guess I'll go for a solution with git aliases
Previous: Jens Lehmann
Message 3 of 3 in “git diff --numstat <branch> always shows dirty submodules”
  1. Gelonida NNov 12, 2011
  2. Jens LehmannNov 12, 2011
  3. Gelonida NNov 13, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.