Merge branch 'jc/maint-log-merge-left-right'
[gitweb.git] / Documentation / gitattributes.txt
index 71c7ad76d57f5ce89206ccbc8f4c66cadd8f7743..84ec9623a26e2c36f7346a430a46a4a4915e0382 100644 (file)
@@ -133,6 +133,26 @@ When `core.autocrlf` is set to "input", line endings are
 converted to LF upon checkin, but there is no conversion done
 upon checkout.
 
+If `core.safecrlf` is set to "true" or "warn", git verifies if
+the conversion is reversible for the current setting of
+`core.autocrlf`.  For "true", git rejects irreversible
+conversions; for "warn", git only prints a warning but accepts
+an irreversible conversion.  The safety triggers to prevent such
+a conversion done to the files in the work tree, but there are a
+few exceptions.  Even though...
+
+- "git add" itself does not touch the files in the work tree, the
+  next checkout would, so the safety triggers;
+
+- "git apply" to update a text file with a patch does touch the files
+  in the work tree, but the operation is about text files and CRLF
+  conversion is about fixing the line ending inconsistencies, so the
+  safety does not trigger;
+
+- "git diff" itself does not touch the files in the work tree, it is
+  often run to inspect the changes you intend to next "git add".  To
+  catch potential problems early, safety triggers.
+
 
 `ident`
 ^^^^^^^
@@ -238,7 +258,7 @@ When git needs to show you a diff for the path with `diff`
 attribute set to `jcdiff`, it calls the command you specified
 with the above configuration, i.e. `j-c-diff`, with 7
 parameters, just like `GIT_EXTERNAL_DIFF` program is called.
-See gitlink:git[7] for details.
+See linkgit:git[7] for details.
 
 
 Defining a custom hunk-header
@@ -322,12 +342,43 @@ String::
        requested with "binary".
 
 
+Built-in merge drivers
+^^^^^^^^^^^^^^^^^^^^^^
+
+There are a few built-in low-level merge drivers defined that
+can be asked for via the `merge` attribute.
+
+text::
+
+       Usual 3-way file level merge for text files.  Conflicted
+       regions are marked with conflict markers `<<<<<<<`,
+       `=======` and `>>>>>>>`.  The version from your branch
+       appears before the `=======` marker, and the version
+       from the merged branch appears after the `=======`
+       marker.
+
+binary::
+
+       Keep the version from your branch in the work tree, but
+       leave the path in the conflicted state for the user to
+       sort out.
+
+union::
+
+       Run 3-way file level merge for text files, but take
+       lines from both versions, instead of leaving conflict
+       markers.  This tends to leave the added lines in the
+       resulting file in random order and the user should
+       verify the result. Do not use this if you do not
+       understand the implications.
+
+
 Defining a custom merge driver
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-The definition of a merge driver is done in `gitconfig` not
-`gitattributes` file, so strictly speaking this manual page is a
-wrong place to talk about it.  However...
+The definition of a merge driver is done in the `.git/config`
+file, not in the `gitattributes` file, so strictly speaking this
+manual page is a wrong place to talk about it.  However...
 
 To define a custom merge driver `filfre`, add a section to your
 `$GIT_DIR/config` file (or `$HOME/.gitconfig` file) like this:
@@ -369,7 +420,7 @@ Checking whitespace errors
 
 The `core.whitespace` configuration variable allows you to define what
 `diff` and `apply` should consider whitespace errors for all paths in
-the project (See gitlink:git-config[1]).  This attribute gives you finer
+the project (See linkgit:git-config[1]).  This attribute gives you finer
 control per path.
 
 Set::
@@ -450,9 +501,9 @@ Creating an archive
 If the attribute `export-subst` is set for a file then git will expand
 several placeholders when adding this file to an archive.  The
 expansion depends on the availability of a commit ID, i.e. if
-gitlink:git-archive[1] has been given a tree instead of a commit or a
+linkgit:git-archive[1] has been given a tree instead of a commit or a
 tag then no replacement will be done.  The placeholders are the same
-as those for the option `--pretty=format:` of gitlink:git-log[1],
+as those for the option `--pretty=format:` of linkgit:git-log[1],
 except that they need to be wrapped like this: `$Format:PLACEHOLDERS$`
 in the file.  E.g. the string `$Format:%H$` will be replaced by the
 commit hash.
@@ -460,4 +511,4 @@ commit hash.
 
 GIT
 ---
-Part of the gitlink:git[7] suite
+Part of the linkgit:git[7] suite