From: Patrick Steinhardt Date: Fri, 03 Jul 2026 12:39:47 GMT Subject: Re: Unexpected recursion in 'git rm' Message-ID: In-Reply-To: <1756071445.20260703123414@gmail.com> Adding the mailing list back into Cc. On Fri, Jul 03, 2026 at 12:34:14PM +0300, Евгений Плискин wrote: > > This is expected behaviour, as the argument to git-rm(1) is a pathspec, and "*" matches directory separators by default, see also gitglossary(7) under "pathspec": > > • the pathspec up to the last slash represents a directory prefix. The scope of that pathspec is limited to that subtree. > > • the rest of the pathspec is a pattern for the remainder of the pathname. Paths relative to the directory prefix will be matched against that pattern using fnmatch(3); in particular, * and ? can match directory separators. > > For example, Documentation/*.jpg will match all .jpg files in the Documentation subtree, including Documentation/chapter_1/figure_1.jpg. > > Could you maybe clarify which part of git-rm(1) made you think that this wouldn't happen? > > Thank you for your reply. I believe you are correct. > > I have made more research and found a way to remove files in current directory only without recursion into subdirectories: > git rm -n ':(glob)*.json' Yup, that wouldn't cross directory separators indeed. Patrick