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

Re: [RFC] Case insensitive Git attributes

From
Lars Schneider <larsxschneider@gmail.com>
Date
Jan 24, 2017, 09:49 UTC
Message-ID
<77FC347D-574E-4A4C-8114-8AD14222279B@gmail.com>
In-Reply-To
<xmqqwpdlr2ht.fsf@gitster.mtv.corp.google.com>
Show 15 quoted lines
> On 23 Jan 2017, at 20:38, Junio C Hamano <gitster@pobox.com> wrote:
> 
> Junio C Hamano <gitster@pobox.com> writes:
> 
>> So you are worried about the case where somebody on a case
>> insensitive but case preserving system would do
>> 
>>   $ edit file.txt
>>   $ edit .gitattributes
>>   $ git add file.txt .gitattributes
>> 
>> and adds "*.TXT	someattr=true" to the attributes file, which
>> would set someattr to true on his system for file.txt, but when the
>> result is checked out on a case sensitive system, it would behave
>> differently because "*.TXT" does not match "file.txt"?
Correct!
Show 29 quoted lines
>> How do other systems address it?  Your Java, Ruby, etc. sources may
>> refer to another file with "import" and the derivation of the file
>> names from class names or package names would have the same issue,
>> isn't it?  Do they have an option that lets you say
>> 
>>   Even though the import statements may say "import a.b.C", we
>>   know that the source tarball was prepared on a case insensitive
>>   system, and I want you to look for a/b/C.java and a/b/c.java and
>>   use what was found.
>> 
>> or something like that?  Same for anything that records other
>> filenames in the content to refer to them, like "Makefile".
>> 
>> My knee jerk reaction to that is that .gitattributes and .gitignore
>> should not be instructed to go case insensitive on case sensitive
>> systems.  If the system is case insensitive but case preserving,
>> it probably would make sense not to do case insensitive matching,
>> which would prevent the issue from happening in the first place.
> 
> Sorry, but there is a slight leap in the above that makes it hard to
> track my thought, so let me clarify a bit.  
> 
> In the above, I am guessing the answer to the "How do other systems
> address it?" question to be "nothing".  And that leads to the
> conclusion that it is better to do "nothing on case sensitive
> systems, and probably become evem more strict on case insensitive
> but case preserving systems", because that will give us a chance to
> expose the problem earlier, hopefully even on the originating
> system.

I agree: Git attributes should behave the same on all platforms independent of the file system type. I dug a bit deeper and realized that this is actually already the case. However, the default (?) core.ignorecase=1 config on Win/Mac generates the behavior explained above. I wonder if 6eba621 ("attr.c: respect core.ignorecase when matching attribute patterns", 2011-10-11) was a good idea.

AFAIK disabling core.ignorecase entirely on Win/Mac is no solution as this would generate other trouble.

Git users can already create case insensitive gitattributes pattern. E.g.: *.[tT][xX][tT]

However, based on my dayjob experience no Win/Mac developer does that as it makes the gitattributes file unreadable. Consequently, Linux developers are screwed. Therefore, I wonder if it would make sense to introduce a shortcut for the case insensitive glob pattern. E.g.:

*.txt ignorecase

If Git detects the ignorecase attribute then it could generate *.[tT][xX][tT] automatically.

Previous: Junio C Hamano
Message 6 of 6 in “Re: [RFC] Case insensitive Git attributes”
  1. Dakota HawkinsJan 22, 2017
  2. Junio C HamanoJan 23, 2017
  3. Lars SchneiderJan 23, 2017
  4. Junio C HamanoJan 23, 2017
  5. Junio C HamanoJan 23, 2017
  6. Lars SchneiderJan 24, 2017

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.