Re: [PATCH] Make !pattern in .gitattributes non-fatal
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:56:17
Thomas Rast [off-list ref] writes:
Junio C Hamano [off-list ref] writes:quoted
Thomas Rast [off-list ref] writes:quoted
Before 82dce99 (attr: more matching optimizations from .gitignore, 2012-10-15), .gitattributes did not have any special treatment of a leading '!'. The docs, however, always said The rules how the pattern matches paths are the same as in `.gitignore` files; see linkgit:gitignore[5]. By those rules, leading '!' means pattern negation. So 82dce99 correctly determined that this kind of line makes no sense and should be disallowed. However, users who actually had a rule for files starting with a '!' are in a bad position: before 82dce99 '!' matched that literal character, so it is conceivable that users have .gitattributes with such lines in them. After 82dce99 the unescaped version was disallowed in such a way that git outright refuses to run(!) most commands in the presence of such a .gitattributes. It therefore becomes very hard to fix, let alone work with, such repositories.Fixing the working tree is easy, but when we read from a history that already records such an entry in an attribute file, it would become somewhat cumbersome. I wouldn't use "very hard to fix" to describe such a case.Well, I'm sorry if I hurt any feelings there, but... ~/tmp/badattr(master)$ git show bad:.gitattributes !bad text ~/tmp/badattr(master)$ ~/g/git-checkout bad # a git without my patch fatal: Negative patterns are forbidden in git attributes Use '\!' for literal leading exclamation. ~/tmp/badattr(master)$ git status # On branch master nothing to commit (use -u to show untracked files) Notice how it remains on master. I suppose with enough knowledge of the internals I could manage,...
That would have been nicer to have in the log message. In any case, 1.8.1.5 will go out with this fix (this is v1.8.1 regression IIUC) this afternoon. Thanks for a fix.