Skip to content

Commit

Permalink
Document custom hunk header selection
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Jul 9, 2007
1 parent 5c054a9 commit ae7aa49
Showing 1 changed file with 51 additions and 4 deletions.
55 changes: 51 additions & 4 deletions Documentation/gitattributes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Expand Down Expand Up @@ -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::

Expand All @@ -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
Expand All @@ -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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Expand Down

0 comments on commit ae7aa49

Please sign in to comment.