gitattributes: Document the unified "auto" handling

Update the documentation about text=auto:
text=auto now follows the core.autocrlf handling when files are not
normalized in the repository.

For a cross platform project recommend the usage of attributes for
line-ending conversions.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Torsten Bögershausen 2016-08-26 22:18:48 +02:00 committed by Junio C Hamano
parent 5cb0d5ad05
commit e28eae3184

View File

@ -182,6 +182,30 @@ While Git normally leaves file contents alone, it can be configured to
normalize line endings to LF in the repository and, optionally, to normalize line endings to LF in the repository and, optionally, to
convert them to CRLF when files are checked out. convert them to CRLF when files are checked out.
If you simply want to have CRLF line endings in your working directory
regardless of the repository you are working with, you can set the
config variable "core.autocrlf" without using any attributes.
------------------------
[core]
autocrlf = true
------------------------
This does not force normalization of text files, but does ensure
that text files that you introduce to the repository have their line
endings normalized to LF when they are added, and that files that are
already normalized in the repository stay normalized.
If you want to ensure that text files that any contributor introduces to
the repository have their line endings normalized, you can set the
`text` attribute to "auto" for _all_ files.
------------------------
* text=auto
------------------------
The attributes allow a fine-grained control, how the line endings
are converted.
Here is an example that will make Git normalize .txt, .vcproj and .sh Here is an example that will make Git normalize .txt, .vcproj and .sh
files, ensure that .vcproj files have CRLF and .sh files have LF in files, ensure that .vcproj files have CRLF and .sh files have LF in
the working directory, and prevent .jpg files from being normalized the working directory, and prevent .jpg files from being normalized
@ -195,48 +219,14 @@ regardless of their content.
*.jpg -text *.jpg -text
------------------------ ------------------------
Other source code management systems normalize all text files in their NOTE: When `text=auto` conversion is enabled in a cross-platform
repositories, and there are two ways to enable similar automatic project using push and pull to a central repository the text files
normalization in Git. containing CRLFs should be normalized.
If you simply want to have CRLF line endings in your working directory From a clean working directory:
regardless of the repository you are working with, you can set the
config variable "core.autocrlf" without using any attributes.
------------------------
[core]
autocrlf = true
------------------------
This does not force normalization of all text files, but does ensure
that text files that you introduce to the repository have their line
endings normalized to LF when they are added, and that files that are
already normalized in the repository stay normalized.
If you want to interoperate with a source code management system that
enforces end-of-line normalization, or you simply want all text files
in your repository to be normalized, you should instead set the `text`
attribute to "auto" for _all_ files.
------------------------
* text=auto
------------------------
This ensures that all files that Git considers to be text will have
normalized (LF) line endings in the repository. The `core.eol`
configuration variable controls which line endings Git will use for
normalized files in your working directory; the default is to use the
native line ending for your platform, or CRLF if `core.autocrlf` is
set.
NOTE: When `text=auto` normalization is enabled in an existing
repository, any text files containing CRLFs should be normalized. If
they are not they will be normalized the next time someone tries to
change them, causing unfortunate misattribution. From a clean working
directory:
------------------------------------------------- -------------------------------------------------
$ echo "* text=auto" >>.gitattributes $ echo "* text=auto" >.gitattributes
$ rm .git/index # Remove the index to force Git to $ rm .git/index # Remove the index to force Git to
$ git reset # re-scan the working directory $ git reset # re-scan the working directory
$ git status # Show files that will be normalized $ git status # Show files that will be normalized