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

Re: [BUG] git-add doesn't apply filepatterns to tracked files

From
Kevin Ballard <kevin@sb.org>
Date
Dec 8, 2010, 23:27 UTC
Message-ID
<3A1EAFC5-8D24-4E4F-B1BB-B1E153964EB0@sb.org>
In-Reply-To
<7vipz3j228.fsf@alter.siamese.dyndns.org>
On Dec 8, 2010, at 3:07 PM, Junio C Hamano wrote:
Show 8 quoted lines
> Kevin Ballard <kevin@sb.org> writes:
> 
>> It seems that git-add doesn't match filepatterns against tracked files,
> 
> This is an issue known for a long time (and the one I had been bitching
> about every time I had a chance).  Tracked ones obey diff-index pathspec
> rules (leading path match only) while untracked ones use gitignore
> pathspec rules.

If I understand you correctly, you're saying tracked files don't understand patterns because git-diff-index doesn't handle patterns? Is there some reason that git-diff-index doesn't support patterns? I tried a handful of commands and here's the pattern-matching behavior I saw:

git-add: patterns match untracked, but not tracked git-rm: patterns match tracked files, command doesn't work on untracked git-status: patterns match untracked, but not tracked git-ls-files: patterns match tracked, command doesn't work on untracked git-ls-tree: no pattern support git-check-attr: no pattern support

Documentation is a bit sporadic here as well. git-add lists <filepattern> in its synopsis and options and defines this as supporting "fileglobs". No mention whatsoever of the tracked file limitation. git-rm only lists <file> in synopsis/options, but does document this as being a "fileglob". git-status uses <pathspec> in the synopsis, and doesn't even document this in the options. It only makes a reference in the description, calling it "paths". git-ls-files calls it <file> in both synopsis and options, and makes no mention whatsoever of globs. git-ls-tree uses <path> in both synopsis/options, but explicitly claims that this is really a pattern in the option documentation. Curious, given its complete lack of pattern matching. git-check-attr uses <list-of-paths> in the synopsis, with no mention in the options.

Overall, there's a few problems here. The first is that git-add and git-ls-files apply the git-diff-index rules for tracked files, but apply actual patterns to untracked files. The second is the documentation is inconsistent, both in the name of the argument, and in making it clear which commands actually support patterns (plus the documentation for git-ls-tree is explicitly wrong about pattern support). The third is we're inconsistent in which commands support patterns at all.

-Kevin Ballard
Previous: Junio C Hamano
Message 3 of 3 in “[BUG] git-add doesn't apply filepatterns to tracked files”
  1. Kevin BallardDec 8, 2010
  2. Junio C HamanoDec 8, 2010
  3. Kevin BallardDec 8, 2010

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.