From: "Philip Oakley" <philipoakley@iee.org>
To: "Junio C Hamano" <gitster@pobox.com>,
"Duy Nguyen" <pclouds@gmail.com>,
"Torsten Bögershausen" <tboegi@web.de>
Cc: "Git List" <git@vger.kernel.org>,
"git-for-windows" <git-for-windows@googlegroups.com>,
"Johannes Schindelin" <Johannes.Schindelin@gmx.de>
Subject: Re: [git-for-windows] Case insensitive branch names
Date: Mon, 21 Dec 2015 20:08:12 -0000 [thread overview]
Message-ID: <93EE538CE2634272BABFCEB55C6A091E@PhilipOakley> (raw)
In-Reply-To: 5678434B.5040506@web.de
From: "Torsten Bögershausen" <tboegi@web.de>
>
> On 2015-12-21 18.37, Junio C Hamano wrote:
>> Duy Nguyen <pclouds@gmail.com> writes:
>>
>>> On Mon, Dec 21, 2015 at 6:01 PM, Philip Oakley <philipoakley@iee.org>
>>> wrote:
>>>> On the Git User's list, Diego J. reported that:
>>>>
>>>> 'When I "checkout" a branch using different Upper Case/Lower Case than
>>>> the
>>>> original, the branch doesn't show in "git branch [--list]"' [1]
>>>>
>>>> While case sensitivity for filenames is a common issue on Windows and
>>>> the
>>>> like, I haven't seen any discussion regarding ref name sensitivity -
>>>> any
>>>> pointers to past discussions?
>>> Multiple ref backend [1] should solve this.
>> Yup, I had the same reaction. Instead of restricting the namespace
>> of branches even on systems that do not have this problem, use a ref
>> backend that is not limited by the underlying filesystem. A much
>> better solution.
My thought was more that on a case preserving FS we (that FS Git
implementation) might warn if they have ended up not on a valid branch name.
It felt wrong that the checkout reported success.
>>
>> In addition to the LMDB backend, it might not be a bad idea to add
>> another filesystem-based backend that encodes the refnames safely on
>> case insensitive or case destroying filesystem. That way, those who
>> do not want an extra dependency but do want case sensitive refnames
>> would have an option, and having two non-default backends with quite
>> different semantics may be a good way to ensure that the API for
>> refs backend is kept sane.
A suitable case sensitive, case preserving backend would solve it for those
using it, which will be a help. Though those that don't will still need to
be careful.
>
> This has been reported (probably a couple of times),
> one copy I have here was under "Branch Name Case Sensitivity"
> around Feb/March 2014.
Found the thread
http://thread.gmane.org/gmane.comp.version-control.git/242768/focus=242846
though I try to avoid having a 'don't do that' response for some of these
potentially hazardous cases (though the cost benefit may not justify it;-)
>
> The lstat() in refs.c can not be fixed, as the underlying OS/FS thinks
> that lstat("nocase") == lstat("NoCase") and
> open("nocase") == NoCase").
>
> The the "real name" will not be detected, unless somebody does
> opendir(), readdir() and closedir().
> This is expensive (in terms of execution time), and nobody
> has tried to do something.
That's probably a key bit of info I didn't know - that the true file name
can't be known without that overhead. Various stackoverflow Q&As [1] show
that others have also had some difficulties...
>
> One cheap solution would be to run "git pack-refs" internally,
> either from C-code inside Git itself, or from a script.
>
--
Philip
[1] Windows methods of getting true file name (allegedly)
http://stackoverflow.com/questions/4763117/how-can-i-obtain-the-case-sensitive-path-on-windows/4763137#4763137
http://stackoverflow.com/questions/478826/c-sharp-filepath-recasing/479198#479198
http://stackoverflow.com/questions/74451/getting-actual-file-name-with-proper-casing-on-windows
prev parent reply other threads:[~2015-12-21 20:08 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-21 11:01 Case insensitive branch names Philip Oakley
2015-12-21 12:21 ` [git-for-windows] " Duy Nguyen
2015-12-21 17:37 ` Junio C Hamano
2015-12-21 18:22 ` Torsten Bögershausen
2015-12-21 20:08 ` Philip Oakley [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=93EE538CE2634272BABFCEB55C6A091E@PhilipOakley \
--to=philipoakley@iee.org \
--cc=Johannes.Schindelin@gmx.de \
--cc=git-for-windows@googlegroups.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=pclouds@gmail.com \
--cc=tboegi@web.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).