Re: Unexpected recursion in 'git rm'
From: Patrick Steinhardt <hidden>
Date: 2026-07-03 12:39:52
Adding the mailing list back into Cc. On Fri, Jul 03, 2026 at 12:34:14PM +0300, Евгений Плискин wrote:
quoted
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