threads / patch / 48771

patchDocumentation: declare "core.ignorecase" as internal variable

Subject: [PATCH] Documentation: declare "core.ignorecase" as internal variable

## tl;dr

12 messages between Jun 24, 2018 and Jun 28, 2018. Diffs are folded; open one to read it.

replies: 11people: 6as markdown or json

Marc Strapetz· Jun 24, 2018, 10:05 UTC · lore

The current description of "core.ignorecase" reads like an option which is intended to be changed by the user while it's actually expected to be set by Git only [1].

[1] https://marc.info/?l=git&m=152972992729761&w=2
Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
---
  Documentation/config.txt | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
Show changes to Documentation/config.txt +2 −2
diff --git a/Documentation/config.txt b/Documentation/config.txt
index ab641bf5a..c25693828 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -390,7 +390,7 @@ core.hideDotFiles::
  	default mode is 'dotGitOnly'.

  core.ignoreCase::
-	If true, this option enables various workarounds to enable
+	Internal variable which enables various workarounds to enable
  	Git to work better on filesystems that are not case sensitive,
  	like FAT. For example, if a directory listing finds
  	"makefile" when Git expects "Makefile", Git will assume
@@ -399,7 +399,7 @@ core.ignoreCase::
  +
  The default is false, except linkgit:git-clone[1] or linkgit:git-init[1]
  will probe and set core.ignoreCase true if appropriate when the repository
-is created.
+is created. Modifying this value afterwards may result in unexpected 
behavior.

  core.precomposeUnicode::
  	This option is only used by Mac OS implementation of Git.
-- 
2.17.0.rc0.3.gb1b5a51b2
Eric Sunshine· Jun 24, 2018, 10:19 UTC · re: Marc Strapetz · lore

Re: [PATCH] Documentation: declare "core.ignorecase" as internal variable

On Sun, Jun 24, 2018 at 6:05 AM Marc Strapetz <marc.strapetz@syntevo.com> wrote:
Show 5 quoted lines
> The current description of "core.ignorecase" reads like an option which
> is intended to be changed by the user while it's actually expected to
> be set by Git only [1].
>
> [1] https://marc.info/?l=git&m=152972992729761&w=2
Thanks for following up the discussion with a patch.

The commit message, unfortunately, doesn't explain the "why" of this change in enough detail for someone to understand the issue without chasing down that link (which could go stale, or the reader might be offline). Incorporating Bryan's explanation[1] directly into the commit message would likely be a good idea if you happen to re-roll.

    Git on Windows is not designed to run with anything other than
    core.ignoreCase=true, and attempting to do so will cause
    unexpected behavior. In other words, it's not a behavior toggle so
    user's can request the functionality to work one way or the other;
    it's an implementation detail that `git init` and `git clone` set
    when a repository is created purely so they don't have to probe
    the file system each time you run a `git` command.
[1]: https://public-inbox.org/git/CAGyf7-GvcN8EhMgtaZcDJNYNdfLwVH8HVBDmZqJU40nze0NSEA@mail.gmail.com/
> Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
Marc Strapetz· Jun 24, 2018, 10:44 UTC · re: Marc Strapetz · lore

[PATCH v2] Documentation: declare "core.ignorecase" as internal variable

The current description of "core.ignoreCase" reads like an option which is intended to be changed by the user while it's actually expected to be set by Git on initialization only. This is especially important for Git for Windows, as noted by Bryan Turner [1]:

     Git on Windows is not designed to run with anything other than
     core.ignoreCase=true, and attempting to do so will cause
     unexpected behavior. In other words, it's not a behavior toggle so
     user's can request the functionality to work one way or the other;
     it's an implementation detail that `git init` and `git clone` set
     when a repository is created purely so they don't have to probe
     the file system each time you run a `git` command.
[1] https://marc.info/?l=git&m=152972992729761&w=2
Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
---
  Documentation/config.txt | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
Show changes to Documentation/config.txt +2 −2
diff --git a/Documentation/config.txt b/Documentation/config.txt
index ab641bf5a..c25693828 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -390,7 +390,7 @@ core.hideDotFiles::
  	default mode is 'dotGitOnly'.

  core.ignoreCase::
-	If true, this option enables various workarounds to enable
+	Internal variable which enables various workarounds to enable
  	Git to work better on filesystems that are not case sensitive,
  	like FAT. For example, if a directory listing finds
  	"makefile" when Git expects "Makefile", Git will assume
@@ -399,7 +399,7 @@ core.ignoreCase::
  +
  The default is false, except linkgit:git-clone[1] or linkgit:git-init[1]
  will probe and set core.ignoreCase true if appropriate when the repository
-is created.
+is created. Modifying this value afterwards may result in unexpected 
behavior.

  core.precomposeUnicode::
  	This option is only used by Mac OS implementation of Git.
-- 
2.17.0.rc0.3.gb1b5a51b2
Sascha Silbe· Jun 24, 2018, 11:26 UTC · re: Marc Strapetz · lore

Re: [PATCH v2] Documentation: declare "core.ignorecase" as internal variable

Hello Bryan, hello Marc,
Marc Strapetz <marc.strapetz@syntevo.com> writes:
> The current description of "core.ignoreCase" reads like an option which
> is intended to be changed by the user while it's actually expected to
> be set by Git on initialization only. This is especially important for
> Git for Windows, as noted by Bryan Turner [1]:

Does this apply to Mac OS X as well? I helped someone recently who had trouble with renamed files (case change only) in a repository residing on a case-insensitive HFS+ file system. Setting core.ignoreCase explicitly (apparently it didn't get set automatically during clone for some reason) helped; the files are recognised correctly now and the case-only rename could be pulled. Is the post-clone change insufficient on Mac OS X? Do we need to replace the existing repository and clone again using '--config core.ignoreCase=true' to avoid future issues?

PS: Including the message-id of the mail being referenced would be
    useful; the id in the URL you gave is specific to the service being
    used (public-inbox.org) and cannot be used to reference the mail in
    any other archive (local or public). If you use the mid:<message-id>
    syntax (RFC 1630) some MUAs can even recognise the link and open the
    mail directly.
Sascha
-- 
Softwareentwicklung Sascha Silbe, Niederhofenstraße 5/1, 71229 Leonberg
https://se-silbe.de/
USt-IdNr.: DE281696641
Torsten Bögershausen· Jun 24, 2018, 13:47 UTC · re: Marc Strapetz · lore

Re: [PATCH v2] Documentation: declare "core.ignorecase" as internal variable

On Sun, Jun 24, 2018 at 12:44:26PM +0200, Marc Strapetz wrote:
Show 12 quoted lines
> The current description of "core.ignoreCase" reads like an option which
> is intended to be changed by the user while it's actually expected to
> be set by Git on initialization only. This is especially important for
> Git for Windows, as noted by Bryan Turner [1]:
> 
>     Git on Windows is not designed to run with anything other than
>     core.ignoreCase=true, and attempting to do so will cause
>     unexpected behavior. In other words, it's not a behavior toggle so
>     user's can request the functionality to work one way or the other;
>     it's an implementation detail that `git init` and `git clone` set
>     when a repository is created purely so they don't have to probe
>     the file system each time you run a `git` command.

This is a nice explanation, thanaks for that, Some users of Mac OS or SAMBA will see core.ignoreCase=true, and are not supposed to change it.

The same explanation (Git for Windows) is alse valid for HFS+ and APFS under Mac OS and VFAT under all OS. (or even an ext4 file system under Linux exported to Mac OS using SAMBA)

May be something like this?
     Git on a case insensitve file system (Windows, Mac OS, VFAT, SAMBA)
     is not designed to run with anything other than
     core.ignoreCase=true, and attempting to do so will cause
     unexpected behavior. In other words, it's not a behavior toggle so
    .....
Show 33 quoted lines
> 
> [1] https://marc.info/?l=git&m=152972992729761&w=2
> 
> Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
> ---
>  Documentation/config.txt | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index ab641bf5a..c25693828 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -390,7 +390,7 @@ core.hideDotFiles::
>  	default mode is 'dotGitOnly'.
> 
>  core.ignoreCase::
> -	If true, this option enables various workarounds to enable
> +	Internal variable which enables various workarounds to enable
>  	Git to work better on filesystems that are not case sensitive,
>  	like FAT. For example, if a directory listing finds
>  	"makefile" when Git expects "Makefile", Git will assume
> @@ -399,7 +399,7 @@ core.ignoreCase::
>  +
>  The default is false, except linkgit:git-clone[1] or linkgit:git-init[1]
>  will probe and set core.ignoreCase true if appropriate when the repository
> -is created.
> +is created. Modifying this value afterwards may result in unexpected
> behavior.
> 
>  core.precomposeUnicode::
>  	This option is only used by Mac OS implementation of Git.
> -- 
> 2.17.0.rc0.3.gb1b5a51b2
Marc Strapetz· Jun 26, 2018, 21:50 UTC · re: Marc Strapetz · lore

[PATCH v3] Documentation: declare "core.ignorecase" as internal variable

The current description of "core.ignoreCase" reads like an option which is intended to be changed by the user while it's actually expected to be set by Git on initialization only. Subsequently, Git relies on the proper configuration of this variable, as noted by Bryan Turner [1]:

     Git on a case-insensitive filesystem (APFS, HFS+, FAT32, exFAT,
     vFAT, NTFS, etc.) is not designed to be run with anything other
     than core.ignoreCase=true.
[1] https://marc.info/?l=git&m=152998665813997&w=2
     mid:CAGyf7-GeE8jRGPkME9rHKPtHEQ6P1+ebpMMWAtMh01uO3bfy8w@mail.gmail.com
Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
---
  Documentation/config.txt | 9 ++++++---
  1 file changed, 6 insertions(+), 3 deletions(-)
Show changes to Documentation/config.txt +6 −3
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 1cc18a828..c70cfe956 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -390,16 +390,19 @@ core.hideDotFiles::
  	default mode is 'dotGitOnly'.

  core.ignoreCase::
-	If true, this option enables various workarounds to enable
+	Internal variable which enables various workarounds to enable
  	Git to work better on filesystems that are not case sensitive,
-	like FAT. For example, if a directory listing finds
-	"makefile" when Git expects "Makefile", Git will assume
+	like APFS, HFS+, FAT, NTFS, etc. For example, if a directory listing
+	finds "makefile" when Git expects "Makefile", Git will assume
  	it is really the same file, and continue to remember it as
  	"Makefile".
  +
  The default is false, except linkgit:git-clone[1] or linkgit:git-init[1]
  will probe and set core.ignoreCase true if appropriate when the repository
  is created.
++
+Git relies on the proper configuration of this variable for your operating
+and file system. Modifying this value may result in unexpected behavior.

  core.precomposeUnicode::
  	This option is only used by Mac OS implementation of Git.
-- 
2.17.0.rc0.3.gb1b5a51b2
Junio C Hamano· Jun 27, 2018, 19:11 UTC · re: Marc Strapetz · lore

Re: [PATCH v3] Documentation: declare "core.ignorecase" as internal variable

Marc Strapetz <marc.strapetz@syntevo.com> writes:
Show 18 quoted lines
> [1. text/plain]
> The current description of "core.ignoreCase" reads like an option which
> is intended to be changed by the user while it's actually expected to
> be set by Git on initialization only. Subsequently, Git relies on the
> proper configuration of this variable, as noted by Bryan Turner [1]:
> 
>     Git on a case-insensitive filesystem (APFS, HFS+, FAT32, exFAT,
>     vFAT, NTFS, etc.) is not designed to be run with anything other
>     than core.ignoreCase=true.
> 
> [1] https://marc.info/?l=git&m=152998665813997&w=2
>     mid:CAGyf7-GeE8jRGPkME9rHKPtHEQ6P1+ebpMMWAtMh01uO3bfy8w@mail.gmail.com
> 
> Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
> ---
>  Documentation/config.txt | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 

Hmph. Do other people have difficulty applying this patch to their trees? It is just several lines long so I could retype it myself, but I guess "Content-Type: text/plain; charset=utf-8; format=flowed" has destroyed formatting of the patch rather badly.

Show 27 quoted lines
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index 1cc18a828..c70cfe956 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -390,16 +390,19 @@ core.hideDotFiles::
>  	default mode is 'dotGitOnly'.
>
>  core.ignoreCase::
> -	If true, this option enables various workarounds to enable
> +	Internal variable which enables various workarounds to enable
>  	Git to work better on filesystems that are not case sensitive,
> -	like FAT. For example, if a directory listing finds
> -	"makefile" when Git expects "Makefile", Git will assume
> +	like APFS, HFS+, FAT, NTFS, etc. For example, if a directory listing
> +	finds "makefile" when Git expects "Makefile", Git will assume
>  	it is really the same file, and continue to remember it as
>  	"Makefile".
>  +
>  The default is false, except linkgit:git-clone[1] or linkgit:git-init[1]
>  will probe and set core.ignoreCase true if appropriate when the repository
>  is created.
> ++
> +Git relies on the proper configuration of this variable for your operating
> +and file system. Modifying this value may result in unexpected behavior.
>
>  core.precomposeUnicode::
>  	This option is only used by Mac OS implementation of Git.
Aaron Schrab· Jun 27, 2018, 23:09 UTC · re: Junio C Hamano · lore

Re: [PATCH v3] Documentation: declare "core.ignorecase" as internal variable

At 12:11 -0700 27 Jun 2018, Junio C Hamano <gitster@pobox.com> wrote:
>Hmph.  Do other people have difficulty applying this patch to their
>trees?  It is just several lines long so I could retype it myself,
>but I guess "Content-Type: text/plain; charset=utf-8; format=flowed"
>has destroyed formatting of the patch rather badly.

Yes, format=flowed requires lines that start with a space (along with '>' or 'From ') to be space-stuffed, adding a leading space. This will affect context lines in patches.

I was able to apply it cleanly (I think) by sending the message to: 
  sed '/@@/,$s/^  / /' | git am
That's replacing two leading spaces with one.
Marc Strapetz· Jun 28, 2018, 11:36 UTC · re: Junio C Hamano · lore

Re: [PATCH v3] Documentation: declare "core.ignorecase" as internal variable

On 27.06.2018 21:11, Junio C Hamano wrote:
Show 25 quoted lines
> Marc Strapetz <marc.strapetz@syntevo.com> writes:
> 
>> [1. text/plain]
>> The current description of "core.ignoreCase" reads like an option which
>> is intended to be changed by the user while it's actually expected to
>> be set by Git on initialization only. Subsequently, Git relies on the
>> proper configuration of this variable, as noted by Bryan Turner [1]:
>>
>>      Git on a case-insensitive filesystem (APFS, HFS+, FAT32, exFAT,
>>      vFAT, NTFS, etc.) is not designed to be run with anything other
>>      than core.ignoreCase=true.
>>
>> [1] https://marc.info/?l=git&m=152998665813997&w=2
>>      mid:CAGyf7-GeE8jRGPkME9rHKPtHEQ6P1+ebpMMWAtMh01uO3bfy8w@mail.gmail.com
>>
>> Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
>> ---
>>   Documentation/config.txt | 9 ++++++---
>>   1 file changed, 6 insertions(+), 3 deletions(-)
>>
> 
> Hmph.  Do other people have difficulty applying this patch to their
> trees?  It is just several lines long so I could retype it myself,
> but I guess "Content-Type: text/plain; charset=utf-8; format=flowed"
> has destroyed formatting of the patch rather badly.

I had copy-pasted the patch into Thunderbird. The received email was looking fine in the inbox, however it seems that some leading whitespaces have been added to several lines (when comparing raw contents of v3 and v4). I have resent the patch with git send-email now.

-Marc
Marc Strapetz· Jun 28, 2018, 11:21 UTC · re: Marc Strapetz · lore

[PATCH v4] Documentation: declare "core.ignoreCase" as internal variable

The current description of "core.ignoreCase" reads like an option which is intended to be changed by the user while it's actually expected to be set by Git on initialization only. Subsequently, Git relies on the proper configuration of this variable, as noted by Bryan Turner [1]:

    Git on a case-insensitive filesystem (APFS, HFS+, FAT32, exFAT,
    vFAT, NTFS, etc.) is not designed to be run with anything other
    than core.ignoreCase=true.
[1] https://marc.info/?l=git&m=152998665813997&w=2
    mid:CAGyf7-GeE8jRGPkME9rHKPtHEQ6P1+ebpMMWAtMh01uO3bfy8w@mail.gmail.com
Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
---
 Documentation/config.txt | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
Show changes to Documentation/config.txt +6 −3
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 1cc18a828..c70cfe956 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -390,16 +390,19 @@ core.hideDotFiles::
 	default mode is 'dotGitOnly'.
 
 core.ignoreCase::
-	If true, this option enables various workarounds to enable
+	Internal variable which enables various workarounds to enable
 	Git to work better on filesystems that are not case sensitive,
-	like FAT. For example, if a directory listing finds
-	"makefile" when Git expects "Makefile", Git will assume
+	like APFS, HFS+, FAT, NTFS, etc. For example, if a directory listing
+	finds "makefile" when Git expects "Makefile", Git will assume
 	it is really the same file, and continue to remember it as
 	"Makefile".
 +
 The default is false, except linkgit:git-clone[1] or linkgit:git-init[1]
 will probe and set core.ignoreCase true if appropriate when the repository
 is created.
++
+Git relies on the proper configuration of this variable for your operating
+and file system. Modifying this value may result in unexpected behavior.
 
 core.precomposeUnicode::
 	This option is only used by Mac OS implementation of Git.
-- 
2.17.0.rc0.3.gb1b5a51b2
Torsten Bögershausen· Jun 28, 2018, 16:58 UTC · re: Marc Strapetz · lore

Re: [PATCH v4] Documentation: declare "core.ignoreCase" as internal variable

On 28.06.18 13:21, Marc Strapetz wrote:
Show 45 quoted lines
> The current description of "core.ignoreCase" reads like an option which
> is intended to be changed by the user while it's actually expected to
> be set by Git on initialization only. Subsequently, Git relies on the
> proper configuration of this variable, as noted by Bryan Turner [1]:
> 
>     Git on a case-insensitive filesystem (APFS, HFS+, FAT32, exFAT,
>     vFAT, NTFS, etc.) is not designed to be run with anything other
>     than core.ignoreCase=true.
> 
> [1] https://marc.info/?l=git&m=152998665813997&w=2
>     mid:CAGyf7-GeE8jRGPkME9rHKPtHEQ6P1+ebpMMWAtMh01uO3bfy8w@mail.gmail.com
> 
> Signed-off-by: Marc Strapetz <marc.strapetz@syntevo.com>
> ---
>  Documentation/config.txt | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index 1cc18a828..c70cfe956 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -390,16 +390,19 @@ core.hideDotFiles::
>  	default mode is 'dotGitOnly'.
>  
>  core.ignoreCase::
> -	If true, this option enables various workarounds to enable
> +	Internal variable which enables various workarounds to enable
>  	Git to work better on filesystems that are not case sensitive,
> -	like FAT. For example, if a directory listing finds
> -	"makefile" when Git expects "Makefile", Git will assume
> +	like APFS, HFS+, FAT, NTFS, etc. For example, if a directory listing
> +	finds "makefile" when Git expects "Makefile", Git will assume
>  	it is really the same file, and continue to remember it as
>  	"Makefile".
>  +
>  The default is false, except linkgit:git-clone[1] or linkgit:git-init[1]
>  will probe and set core.ignoreCase true if appropriate when the repository
>  is created.
> ++
> +Git relies on the proper configuration of this variable for your operating
> +and file system. Modifying this value may result in unexpected behavior.
>  
>  core.precomposeUnicode::
>  	This option is only used by Mac OS implementation of Git.
> 
Looks good to me

← back to recent threads