threads / discuss / 21597

git status internals and line endings

Subject: git status internals and line endings

## tl;dr

6 messages between Nov 12, 2009 and Nov 13, 2009.

replies: 5people: 4as markdown or json

Marc Strapetz· Nov 12, 2009, 20:32 UTC · lore

I'm trying to figure out under which circumstances changes in line endings are resulting in 'modified' status (resp. will be committed). I have three files with the same content, differing only in line endings:

- file1 is committed with CRLF and has LF in working tree
- file2 is committed with CRLF and has CRLF in working tree
- file3 is committed with LF and has CRLF in working tree

On Linux, file1 and file3 are reported as modified -- as I would expect. The surprise is on Windows: here only file1 is reported as modified. Why not file3? Btw, 'git hash-object file3' reports the same SHA as for the LF-only content in the repository (not so on Linux, as expected).

Is this some special handling on Windows (and possibly on Mac OS)? In this case, can someone please point me to the corresponding code part? Thanks for any comments regarding this topic.

-- Best regards, Marc Strapetz ============= syntevo GmbH http://www.syntevo.com http://blog.syntevo.com

Jeff King· Nov 13, 2009, 00:15 UTC · re: Marc Strapetz · lore

Re: git status internals and line endings

On Thu, Nov 12, 2009 at 09:32:14PM +0100, Marc Strapetz wrote:
Show 8 quoted lines
> On Linux, file1 and file3 are reported as modified -- as I would expect.
> The surprise is on Windows: here only file1 is reported as modified. Why
> not file3? Btw, 'git hash-object file3' reports the same SHA as for the
> LF-only content in the repository (not so on Linux, as expected).
> 
> Is this some special handling on Windows (and possibly on Mac OS)? In
> this case, can someone please point me to the corresponding code part?
> Thanks for any comments regarding this topic.

Sounds like the core.autocrlf setting (see "git help config"), which I believe is set by default on Windows.

-Peff
Marc Strapetz· Nov 13, 2009, 08:08 UTC · re: Jeff King · lore

Re: git status internals and line endings

> Sounds like the core.autocrlf setting (see "git help config"), which I
> believe is set by default on Windows.

I have checked both $GIT_DIR/config and ~/.gitconfig and autocrlf has not been set. I have then set autocrlf = false for the Windows repository and still the file didn't show up as modified. On Linux, I've added autocrlf = true (resp. autocrlf = input) for the repository and still the file shows up as modified. Not that I don't like this behavior, but I don't understand it :) Windows Git version is 1.6.5.1, Linux version is 1.6.3.3.

-- Best regards, Marc Strapetz ============= syntevo GmbH http://www.syntevo.com http://blog.syntevo.com

Jeff King wrote:
Show 21 quoted lines
> On Thu, Nov 12, 2009 at 09:32:14PM +0100, Marc Strapetz wrote:
> 
>> On Linux, file1 and file3 are reported as modified -- as I would expect.
>> The surprise is on Windows: here only file1 is reported as modified. Why
>> not file3? Btw, 'git hash-object file3' reports the same SHA as for the
>> LF-only content in the repository (not so on Linux, as expected).
>>
>> Is this some special handling on Windows (and possibly on Mac OS)? In
>> this case, can someone please point me to the corresponding code part?
>> Thanks for any comments regarding this topic.
> 
> Sounds like the core.autocrlf setting (see "git help config"), which I
> believe is set by default on Windows.
> 
> -Peff
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
Erik Faye-Lund· Nov 13, 2009, 09:04 UTC · re: Marc Strapetz · lore

Re: git status internals and line endings

On Fri, Nov 13, 2009 at 9:08 AM, Marc Strapetz <marc.strapetz@syntevo.com> wrote:

Show 11 quoted lines
>> Sounds like the core.autocrlf setting (see "git help config"), which I
>> believe is set by default on Windows.
>
> I have checked both $GIT_DIR/config and ~/.gitconfig and autocrlf has
> not been set. I have then set autocrlf = false for the Windows
> repository and still the file didn't show up as modified. On Linux, I've
> added autocrlf = true (resp. autocrlf = input) for the repository and
> still the file shows up as modified. Not that I don't like this
> behavior, but I don't understand it :) Windows Git version is 1.6.5.1,
> Linux version is 1.6.3.3.
>

In order to make changes to core.autocrlf effective, you need to delete .git/index and perform a hard reset: $ rm .git/index $ git reset --hard

Did you do this before checking if the files were modified?
-- 
Erik "kusma" Faye-Lund
Marc Strapetz· Nov 13, 2009, 11:01 UTC · re: Erik Faye-Lund · lore

Re: git status internals and line endings

> In order to make changes to core.autocrlf effective, you need to
> delete .git/index and perform a hard reset:
> $ rm .git/index
> $ git reset --hard
This solved my problem. Thank you!

-- Best regards, Marc Strapetz ============= syntevo GmbH http://www.syntevo.com http://blog.syntevo.com

Erik Faye-Lund wrote:
Show 20 quoted lines
> On Fri, Nov 13, 2009 at 9:08 AM, Marc Strapetz
> <marc.strapetz@syntevo.com> wrote:
>>> Sounds like the core.autocrlf setting (see "git help config"), which I
>>> believe is set by default on Windows.
>> I have checked both $GIT_DIR/config and ~/.gitconfig and autocrlf has
>> not been set. I have then set autocrlf = false for the Windows
>> repository and still the file didn't show up as modified. On Linux, I've
>> added autocrlf = true (resp. autocrlf = input) for the repository and
>> still the file shows up as modified. Not that I don't like this
>> behavior, but I don't understand it :) Windows Git version is 1.6.5.1,
>> Linux version is 1.6.3.3.
>>
> 
> In order to make changes to core.autocrlf effective, you need to
> delete .git/index and perform a hard reset:
> $ rm .git/index
> $ git reset --hard
> 
> Did you do this before checking if the files were modified?
> 
Peter Krefting· Nov 13, 2009, 09:40 UTC · re: Marc Strapetz · lore

Re: git status internals and line endings

Marc Strapetz:
>> Sounds like the core.autocrlf setting (see "git help config"), which I 
>> believe is set by default on Windows.
> I have checked both $GIT_DIR/config and ~/.gitconfig and autocrlf has not 
> been set.

It is usually set by default by the installer. Look at %INSTALLDIR%\etc\gitconfig, it should contain

   [core]
    autoCRLF = true
among other things.
-- 
\\// Peter - http://www.softwolves.pp.se/

← back to recent threads