Subject: Re: noob user, want checkins to all be forced to LF terminated lines

From: Walter Bright <[email-masked]>
Date: Fri, 30 Jul 2010 22:14:40 -0700

Jonathan Nieder wrote:
> Walter Bright wrote:
> 
>> I've just started with git.
> 
> I thought I saw you here years ago. :)

I've been around, just not in git.

>> Exactly what do I put in $HOME/.gitconfig ?
> 
> Well, naturally it depends on what you want to happen.
> 
> If you just want to make sure any new files you commit are tracked
> with simple LF line endings, you can use
> 
> 	[core]
> 		autocrlf = input
> 
> With this setting, Git will not do any munging to files in the work
> tree in any way (unless there is a .gitattributes file requesting to
> do so).

git is installed under Ubuntu, but I'll be checking in files that I edit on both 
Windows and Ubuntu, so the line endings will vary depending on which platform I 
last editted the file on. Hence, I want to force them all to be LF upon checkin.

> That is an _altruistic_ setting to use.  It ensures you do not pollute
> history with some alternative line-ending, but your own work tree may
> not necessarily match the cleaned up versions you are checking in; so
> if you try to "git add" and then "touch" a file with CRLF line endings
> with this setting enabled, you may be surprised at the result!
> (Though a simple "git checkout file.c" afterwards should fix up the
> line endings in the work tree.)

> If you want to make sure text files in the work tree use LF line
> endings and you are using a recent version of Git, use the above
> setting or
> 
> 	[core]
> 		eol = lf

So this changes the file in the repository to lf only, but not in the worktree? 
That's what I want.

> On Unix-y systems, you do not have to do that, since it is the
> default.  On Windows, the "[core] autocrlf" setting is set up
> by default in /etc/gitconfig so you would probably want to
> override that with
> 
> 	[core]
> 		autocrlf = false
> 
> if you are not setting it to input.
> 
> Which files are text files? you may ask.  By default (unless
> autocrlf is enabled), Git treats files as raw data; to get it
> to futz with line endings, you have to declare your text files
> in a file named .gitattributes in the tracked tree.
> 
> 	* crlf
> 	*.jpg -crlf
> 	*.png -crlf

In the tracked tree? The documentation:

http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html#_checking_out_and_checking_in

says it goes in:

  $GIT_DIR/info/attributes, .gitattributes

so I'm confused again. Does .gitattributes go in $GIT_DIR, or in $GIT_DIR/info ? 
And what if both of those files are there, which one 'wins' ?

> The keyword crlf here means “apply line-ending conversions” and
> nothing more.  In particular, it does not represent the preferred
> line ending.
> 
> If everyone for which you want these setting to take effect uses a
> recent version of git, you can write “text” instead of “crlf” if
> you prefer.

git --version says I'm using 1.5.6.3

> Hope that helps,

Yes, it does, thank you!

A final question: where does the repository actually go (so I can back it up)? 
This is a local thing, I'm not trying to set up a networked or remote 
repository, so it'll be the default location.