path: root/Documentation/gitattributes.txt
diff options
authorJunio C Hamano <>2007-04-21 10:14:13 (GMT)
committerJunio C Hamano <>2007-04-25 05:38:51 (GMT)
commitaa4ed402c9721170fde2e9e43c3825562070e65e (patch)
treebd53ad59439661046b506c7b42153bb3caeb9009 /Documentation/gitattributes.txt
parent3fed15f568c24ec00ef78fddc6cbb881fbbb0277 (diff)
Add 'filter' attribute and external filter driver definition.
The interface is similar to the custom low-level merge drivers. First you configure your filter driver by defining 'filter.<name>.*' variables in the configuration. filter.<name>.clean filter command to run upon checkin filter.<name>.smudge filter command to run upon checkout Then you assign filter attribute to each path, whose name matches the custom filter driver's name. Example: (in .gitattributes) *.c filter=indent (in config) [filter "indent"] clean = indent smudge = cat Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'Documentation/gitattributes.txt')
1 files changed, 39 insertions, 0 deletions
diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt
index b6f90f6..8772310 100644
--- a/Documentation/gitattributes.txt
+++ b/Documentation/gitattributes.txt
@@ -156,6 +156,45 @@ In the check-out codepath, the blob content is first converted
with `crlf`, and then `ident`.
+A `filter` attribute can be set to a string value. This names
+filter driver specified in the configuration.
+A filter driver consists of `clean` command and `smudge`
+command, either of which can be left unspecified. Upon
+checkout, when `smudge` command is specified, the command is fed
+the blob object from its standard input, and its standard output
+is used to update the worktree file. Similarly, `clean` command
+is used to convert the contents of worktree file upon checkin.
+Missing filter driver definition in the config is not an error
+but makes the filter a no-op passthru.
+The content filtering is done to massage the content into a
+shape that is more convenient for the platform, filesystem, and
+the user to use. The keyword here is "more convenient" and not
+"turning something unusable into usable". In other words, it is
+"hanging yourself because we gave you a long rope" if your
+project uses filtering mechanism in such a way that it makes
+your project unusable unless the checkout is done with a
+specific filter in effect.
+Interaction between checkin/checkout attributes
+In the check-in codepath, the worktree file is first converted
+with `filter` driver (if specified and corresponding driver
+defined), then the result is processed with `ident` (if
+specified), and then finally with `crlf` (again, if specified
+and applicable).
+In the check-out codepath, the blob content is first converted
+with `crlf`, and then `ident` and fed to `filter`.
Generating diff text