Skip to content

Commit 6696077

Browse files
alexhenriegitster
authored andcommitted
docs: rewrite the documentation of the text and eol attributes
These two sentences are confusing because the description of the text attribute sounds exactly the same as the description of the text=auto attribute: "Setting the text attribute on a path enables end-of-line normalization" "When text is set to "auto", the path is marked for automatic end-of-line conversion" Unless the reader is already familiar with the two variants, there's a high probability that they will think that "end-of-line normalization" is the same thing as "automatic end-of-line conversion". It's also not clear that the phrase "When the file has been committed with CRLF, no conversion is done" in the paragraph for text=auto does not apply equally to the bare text attribute which is described earlier. Moreover, it falsely implies that normalization is only suppressed if the file has been committed. In fact, running `git add` on a CRLF file, adding the text=auto attribute to the file, and running `git add` again does not do anything to the line endings either. On top of that, in several places the documentation for the eol attribute sounds like either it does not affect normalization on checkin or it forces normalization on checkin. It also sounds like setting eol (or setting a config variable) is required to turn on conversion on checkout, but the text attribute can turn on conversion on checkout by itself if eol is unspecified. Rephrase the documentation of text, text=auto, eol, eol=crlf, and eol=lf to be clear about how they are the same, how they are different, and in what cases conversion is performed. Helped-by: Torsten Bögershausen <[email protected]> Signed-off-by: Alex Henrie <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 0d1bd1d commit 6696077

File tree

1 file changed

+31
-28
lines changed

1 file changed

+31
-28
lines changed

Documentation/gitattributes.txt

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -120,20 +120,19 @@ repository upon 'git add' and 'git commit'.
120120
`text`
121121
^^^^^^
122122

123-
This attribute enables and controls end-of-line normalization. When a
124-
text file is normalized, its line endings are converted to LF in the
125-
repository. To control what line ending style is used in the working
126-
directory, use the `eol` attribute for a single file and the
127-
`core.eol` configuration variable for all text files.
128-
Note that setting `core.autocrlf` to `true` or `input` overrides
129-
`core.eol` (see the definitions of those options in
130-
linkgit:git-config[1]).
123+
This attribute marks the path as a text file, which enables end-of-line
124+
conversion: When a matching file is added to the index, the file's line
125+
endings are normalized to LF in the index. Conversely, when the file is
126+
copied from the index to the working directory, its line endings may be
127+
converted from LF to CRLF depending on the `eol` attribute, the Git
128+
config, and the platform (see explanation of `eol` below).
131129

132130
Set::
133131

134132
Setting the `text` attribute on a path enables end-of-line
135-
normalization and marks the path as a text file. End-of-line
136-
conversion takes place without guessing the content type.
133+
conversion on checkin and checkout as described above. Line endings
134+
are normalized to LF in the index every time the file is checked in,
135+
even if the file was previously added to Git with CRLF line endings.
137136

138137
Unset::
139138

@@ -142,10 +141,11 @@ Unset::
142141

143142
Set to string value "auto"::
144143

145-
When `text` is set to "auto", the path is marked for automatic
146-
end-of-line conversion. If Git decides that the content is
147-
text, its line endings are converted to LF on checkin.
148-
When the file has been committed with CRLF, no conversion is done.
144+
When `text` is set to "auto", Git decides by itself whether the file
145+
is text or binary. If it is text and the file was not already in
146+
Git with CRLF endings, line endings are converted on checkin and
147+
checkout as described above. Otherwise, no conversion is done on
148+
checkin or checkout.
149149

150150
Unspecified::
151151

@@ -159,26 +159,29 @@ unspecified.
159159
`eol`
160160
^^^^^
161161

162-
This attribute sets a specific line-ending style to be used in the
163-
working directory. This attribute has effect only if the `text`
164-
attribute is set or unspecified, or if it is set to `auto`, the file is
165-
detected as text, and it is stored with LF endings in the index. Note
166-
that setting this attribute on paths which are in the index with CRLF
167-
line endings may make the paths to be considered dirty unless
168-
`text=auto` is set. Adding the path to the index again will normalize
169-
the line endings in the index.
162+
This attribute marks a path to use a specific line-ending style in the
163+
working tree when it is checked out. It has effect only if `text` or
164+
`text=auto` is set (see above), but specifying `eol` automatically sets
165+
`text` if `text` was left unspecified.
170166

171167
Set to string value "crlf"::
172168

173-
This setting forces Git to normalize line endings for this
174-
file on checkin and convert them to CRLF when the file is
175-
checked out.
169+
This setting converts the file's line endings in the working
170+
directory to CRLF when the file is checked out.
176171

177172
Set to string value "lf"::
178173

179-
This setting forces Git to normalize line endings to LF on
180-
checkin and prevents conversion to CRLF when the file is
181-
checked out.
174+
This setting uses the same line endings in the working directory as
175+
in the index when the file is checked out.
176+
177+
Unspecified::
178+
179+
If the `eol` attribute is unspecified for a file, its line endings
180+
in the working directory are determined by the `core.autocrlf` or
181+
`core.eol` configuration variable (see the definitions of those
182+
options in linkgit:git-config[1]). If `text` is set but neither of
183+
those variables is, the default is `eol=crlf` on Windows and
184+
`eol=lf` on all other platforms.
182185

183186
Backwards compatibility with `crlf` attribute
184187
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

0 commit comments

Comments
 (0)