Subject: Re: end-of-line diff checkout direction dependence problem

From: Torsten Bögershausen <[email-masked]>
Date: Tue, 30 Jun 2015 16:41:23 +0200

On 2015-06-30 16.12, Thomas Vieten wrote:
> We face a very inconvenient problem with end-of-line diffs which are not "real".
> We know the end-of-line problem very well as we thought.
> But now we found a new phenomenon and nobody mentioning it.
> 
> Consider the following repository structure:
> 
>           -----------|----|------------->branch1
>         /
> master
>         \
> ----------|-------|---------|--------------->branch2
> 
> The branches are based on master/head.
> We just consider one branch here, e.g. branch1 .
> 
> Working with the head of branch1 gives no problems. No end-of-line diffs.
> Also going back in the direction of master - no problems.
> Only in the case if we do a checkout from branch1 to master, then
> all of a sudden end-of-line diffs appear.
> The files might be changed, but the end-of-line attributes in gitattributes are
> not changed in the branch.
> 
> It seems to be the case that since the last change to the files which pop up
> with eol differences, gittattributes where changed and touch their extensions.
> 
> With the operation
> 
> git ls-files -z | xargs -0 rm -f  # delete all the files of this version - here
> master/head
> git reset --hard                  # force checkout of master/head and reset index
> 
> The problem disappears! No eol problems anymore. Something like a brute force
> checkout.
> 
> Also checking out versions in the direction of branch1 give never end-of-line
> diffs.
> 
> What has changed somewhen are the gitattributes.
> 
> We estimate that this becomes a problem when applying the diffs from branch1 in
> the direction of
> the master. Finally then the diffs result in a different state from the master.
> 
> But when the master is checked out freshly, this difference does not appear.
> 
> Very, very annoying.
> 
> We check now every time when these end-of-line diffs appear, if they are really
> end of line diffs
> 
> git diff --ignore-space-at-eol
> 
> and then try the procedure above.
> 
> But to have a dependence from the direction of the checkout is somewhat irritating.
> 
> If this is not a bug - then how to avoid it ?
> 
> bye for now
> 
> Thomas
> 
The things which are described don't sound unfamilar.
First some questions:
Which Git/OS are you running on ?

CYGWIN ?
Git-for-Windows ?
Linux ?
Other ?

Which versions ?
How does your .gitattribute file look like ?

It may be, that you need to "nornalize" your repo:

https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
The search for this text
"When text=auto normalization"
and follow the instructions: