Browse Source

Document custom hunk header selection

Since the external interface seems to have stabilized for this
new feature, let's document it properly.

Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Junio C Hamano 18 years ago
parent
commit
ae7aa49914
  1. 55
      Documentation/gitattributes.txt

55
Documentation/gitattributes.txt

@ -72,8 +72,8 @@ EFFECTS @@ -72,8 +72,8 @@ EFFECTS
-------

Certain operations by git can be influenced by assigning
particular attributes to a path. Currently, three operations
are attributes-aware.
particular attributes to a path. Currently, the following
operations are attributes-aware.

Checking-out and checking-in
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -199,7 +199,9 @@ Generating diff text @@ -199,7 +199,9 @@ Generating diff text
~~~~~~~~~~~~~~~~~~~~

The attribute `diff` affects if `git diff` generates textual
patch for the path or just says `Binary files differ`.
patch for the path or just says `Binary files differ`. It also
can affect what line is shown on the hunk header `@@ -k,l +n,m @@`
line.

Set::

@ -224,7 +226,8 @@ String:: @@ -224,7 +226,8 @@ String::
Diff is shown using the specified custom diff driver.
The driver program is given its input using the same
calling convention as used for GIT_EXTERNAL_DIFF
program.
program. This name is also used for custom hunk header
selection.


Defining a custom diff driver
@ -249,6 +252,50 @@ parameters, just like `GIT_EXTERNAL_DIFF` program is called. @@ -249,6 +252,50 @@ parameters, just like `GIT_EXTERNAL_DIFF` program is called.
See gitlink:git[7] for details.


Defining a custom hunk-header
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Each group of changes (called "hunk") in the textual diff output
is prefixed with a line of the form:

@@ -k,l +n,m @@ TEXT

The text is called 'hunk header', and by default a line that
begins with an alphabet, an underscore or a dollar sign is used,
which matches what GNU `diff -p` output uses. This default
selection however is not suited for some contents, and you can
use customized pattern to make a selection.

First in .gitattributes, you would assign the `diff` attribute
for paths.

------------------------
*.tex diff=tex
------------------------

Then, you would define "diff.tex.funcname" configuration to
specify a regular expression that matches a line that you would
want to appear as the hunk header, like this:

------------------------
[diff "tex"]
funcname = "^\\(\\\\\\(sub\\)*section{.*\\)$"
------------------------

Note. A single level of backslashes are eaten by the
configuration file parser, so you would need to double the
backslashes; the pattern above picks a line that begins with a
backslash, and zero or more occurences of `sub` followed by
`section` followed by open brace, to the end of line.

There are a few built-in patterns to make this easier, and `tex`
is one of them, so you do not have to write the above in your
configuration file (you still need to enable this with the
attribute mechanism, via `.gitattributes`). Another built-in
pattern is defined for `java` that defines a pattern suitable
for program text in Java language.


Performing a three-way merge
~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Loading…
Cancel
Save