Overview
A moderately (dis)organized list of features related to dealing with whitespace issues in Git, in no particular order. It's a matter of some debate whether EOL standardization is simply a subet of whitespace issues, or whether it deserves its own page.
config options
apply.ignoreWhitespace
apply.whitespace
core.whitespace
$ git config --global core.whitespace \
trailing-space,-space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol
core.eol
core.safecrlf
core.autocrlf
Setting this variable to “true” is the same as setting the text attribute to “auto” on all files and core.eol to “crlf”. Set to true if you want to have CRLF line endings in your working directory and the repository has LF line endings. This variable can be set to input, in which case no output conversion is performed.
git apply
TO DO.
git diff
Flag whitespace errors:
$ git diff --check
based on:
--check
Warn if changes introduce conflict markers or whitespace errors. What are
considered whitespace errors is controlled by core.whitespace configuration.
By default, trailing whitespaces (including lines that solely consist of
whitespaces) and a space character that is immediately followed by a tab
character inside the initial indent of the line are considered whitespace
errors. Exits with non-zero status if problems are found. Not compatible with
--exit-code.
--ws-error-highlight=<kind>
Highlight whitespace errors in the context, old or new lines of the diff.
Multiple values are separated by comma, none resets previous values, default
reset the list to new and all is a shorthand for old,new,context. When this
option is not given, and the configuration variable diff.wsErrorHighlight is
not set, only whitespace errors in new lines are highlighted. The whitespace
errors are colored whith color.diff.whitespace.
Other possibilities:
--ignore-space-at-eol
Ignore changes in whitespace at EOL.
-b, --ignore-space-change
Ignore changes in amount of whitespace. This ignores whitespace at line end, and
considers all other sequences of one or more whitespace characters to be equivalent.
-w, --ignore-all-space
Ignore whitespace when comparing lines. This ignores differences even if one line has
whitespace where the other line has none.
--ignore-blank-lines
Ignore changes whose lines are all blank.
git merge
Recursive merge options:
ignore-space-change, ignore-all-space, ignore-space-at-eol, ignore-cr-at-eol
Treats lines with the indicated type of whitespace change as unchanged for the sake
of a three-way merge. Whitespace changes mixed with other changes to a line are not
ignored. See also git-diff(1) -b, -w, --ignore-space-at-eol, and --ignore-cr-at-eol.
· If their version only introduces whitespace changes to a line, our version is
used;
· If our version introduces whitespace changes but their version includes a
substantial change, their version is used;
· Otherwise, the merge proceeds in the usual way.
git rebase
--ignore-whitespace, --whitespace=<option>
These flag are passed to the git apply program (see git-apply(1)) that applies
the patch. Incompatible with the --interactive option.
From man git-apply:
--ignore-space-change, --ignore-whitespace
When applying a patch, ignore changes in whitespace in context lines if
necessary. Context lines will preserve their whitespace, and they will not
undergo whitespace fixing regardless of the value of the --whitespace option.
New lines will still be fixed, though.
--whitespace=<action>
When applying a patch, detect a new or modified line that has whitespace
errors. What are considered whitespace errors is controlled by core.whitespace
configuration. By default, trailing whitespaces (including lines that solely
consist of whitespaces) and a space character that is immediately followed by
a tab character inside the initial indent of the line are considered
whitespace errors.
By default, the command outputs warning messages but applies the patch. When
git-apply is used for statistics and not applying a patch, it defaults to
nowarn.
You can use different <action> values to control this behavior:
· nowarn turns off the trailing whitespace warning.
· warn outputs warnings for a few such errors, but applies the patch as-is
(default).
· fix outputs warnings for a few such errors, and applies the patch after
fixing them (strip is a synonym --- the tool used to consider only
trailing whitespace characters as errors, and the fix involved stripping
them, but modern Gits do more).
· error outputs warnings for a few such errors, and refuses to apply the
patch.
· error-all is similar to error but shows all errors.
git blame
-w
Ignore whitespace when comparing the parent’s version and the child’s to find
where the lines came from.
git stripspace
$ man git-stripspace