On Oct 8, 2010, at 2:58 PM, Maaartin wrote: > You don't. You can do something like > > *.xcodeproj/* > !.xcodeproj/subdir_with_project > .xcodeproj/subdir_with_project/* > !.xcodeproj/subdir_with_project/*.pbxproj > > I'm a beginner but I just stumbled upon this very problem five minutes ago. That's not the right layout. I'd have to do *.xcodeproj/* !*.xcodeproj/project.pbxproj */*.xcodeproj/* !*/*.xcodeproj/project.pbxproj And so on, once for each possible level of nesting. > The reason for git ignoring everything in the directory without ever looking > there is efficiency. That's not what's happening either. That happens if you ignore the directory itself, such as *.xcodeproj/ That won't look in the directory at all to match non-ignore patterns. The problem I'm talking about is simply that you cannot write a pattern that includes a slash and have that pattern match at any nesting level. Upon further reflection, if we stick with platform-provided fnmatch() we don't have to special-case a prefixed **/. We could simply define patterns as always matching in that way, and you can use the already-existing prefixed / to root it at the current level. So if my pattern looks like *.xcodeproj/* Then it will attempt to match this pattern against the last 2 path components of any path rooted in this directory. It can simply count the slashes to determine the number of path components. If I really want it to just match *.xcodeproj files in the current directory then my pattern should look like /*.xcodeproj/* -Kevin Ballard-- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html