gitattributes man page on OpenBSD

Man page or keyword search:  
man Server   11362 pages
apropos Keyword Search (all sections)
Output format
OpenBSD logo
[printable version]



GITATTRIBUTES(5)				 GITATTRIBUTES(5)

NAME
       gitattributes - defining attributes per path

SYNOPSIS
       $GIT_DIR/info/attributes, .gitattributes

DESCRIPTION
       A  gitattributes	 file  is  a simple text file that gives attributes to
       pathnames.

       Each line in gitattributes file is of form:

       pattern attr1 attr2 ...

       That is, a pattern followed by an attributes list, separated by whites-
       paces.  When  the  pattern matches the path in question, the attributes
       listed on the line are given to the path.

       Each attribute can be in one of these states for a given path:

       Set    The path has the attribute with special value  "true";  this  is
	      specified	 by  listing  only  the	 name  of the attribute in the
	      attribute list.

       Unset  The path has the attribute with special value "false";  this  is
	      specified	 by  listing the name of the attribute prefixed with a
	      dash - in the attribute list.

       Set to a value
	      The path has the attribute with specified string value; this  is
	      specified	 by  listing  the name of the attribute followed by an
	      equal sign = and its value in the attribute list.

       Unspecified
	      No pattern matches the path, and nothing says if the path has or
	      does  not have the attribute, the attribute for the path is said
	      to be Unspecified.

	      When more than one pattern matches the path, a later line	 over-
	      rides  an	 earlier  line. This overriding is done per attribute.
	      The rules how the pattern matches paths are the same as in .git-
	      ignore files; see gitignore(5).

	      When  deciding  what  attributes	are  assigned  to  a path, git

								1

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

	      consults $GIT_DIR/info/attributes file (which  has  the  highest
	      precedence),  .gitattributes  file  in the same directory as the
	      path in question, and its parent directories up to the  toplevel
	      of  the  work  tree  (the	 further  the  directory that contains
	      .gitattributes is from the  path	in  question,  the  lower  its
	      precedence).

	      If  you wish to affect only a single repository (i.e., to assign
	      attributes to files that	are  particular	 to  one  user’s
	      workflow),   then	  attributes   should	be   placed   in   the
	      $GIT_DIR/info/attributes file. Attributes which should  be  ver-
	      sion-controlled  and  distributed	 to  other repositories (i.e.,
	      attributes of interest to all  users)  should  go	 into  .gitat-
	      tributes files.

	      Sometimes	 you would need to override an setting of an attribute
	      for a path to unspecified state. This can be done by listing the
	      name of the attribute prefixed with an exclamation point !.

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

   Checking-out and checking-in
       These  attributes  affect how the contents stored in the repository are
       copied to the working tree files when commands such as git checkout and
       git merge run. They also affect how git stores the contents you prepare
       in the working tree in the repository upon git add and git commit.

       This attribute enables and controls end-of-line normalization.  When  a
       text  file  is  normalized, its line endings are converted to LF in the
       repository. To control what line ending style is used  in  the  working
       directory,  use	the  eol  attribute for a single file and the core.eol
       configuration variable for all text files.

       Set    Setting the text attribute on a path enables end-of-line normal-
	      ization  and  marks the path as a text file. End-of-line conver-
	      sion takes place without guessing the content type.

       Unset  Unsetting the text attribute on a path tells git not to  attempt
	      any end-of-line conversion upon checkin or checkout.

       Set to string value "auto"
	      When  text  is  set  to "auto", the path is marked for automatic
	      end-of-line normalization. If git decides that  the  content  is

								2

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

	      text, its line endings are normalized to LF on checkin.

       Unspecified
	      If the text attribute is unspecified, git uses the core.autocrlf
	      configuration variable to determine if the file should  be  con-
	      verted.

	      Any  other  value	 causes	 git  to  act as if text has been left
	      unspecified.

	      This attribute sets a specific line-ending style to be  used  in
	      the  working  directory.	It  enables  end-of-line normalization
	      without  any  content  checks,  effectively  setting  the	  text
	      attribute.

       Set to string value "crlf"
	      This  setting forces git to normalize line endings for this file
	      on checkin and convert them to CRLF when	the  file  is  checked
	      out.

       Set to string value "lf"
	      This  setting  forces  git  to  normalize	 line endings to LF on
	      checkin and prevents conversion to CRLF when the file is checked
	      out.

	      For  backwards  compatibility, the crlf attribute is interpreted
	      as follows:

	      .ft C
	      crlf	      text
	      -crlf	      -text
	      crlf=input      eol=lf
	      .ft

	      While git normally leaves file contents alone, it can be config-
	      ured  to	normalize  line	 endings  to LF in the repository and,
	      optionally, to convert them to CRLF when files are checked  out.

	      Here  is	an  example that will make git normalize .txt, .vcproj
	      and .sh files, ensure that .vcproj files have CRLF and .sh files
	      have  LF	in  the working directory, and prevent .jpg files from
	      being normalized regardless of their content.

								3

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

	      .ft C
	      *.txt	      text
	      *.vcproj	      eol=crlf
	      *.sh	      eol=lf
	      *.jpg	      -text
	      .ft

	      Other source code management systems normalize all text files in
	      their  repositories,  and	 there	are two ways to enable similar
	      automatic normalization in git.

	      If you simply want to have CRLF line  endings  in	 your  working
	      directory regardless of the repository you are working with, you
	      can set the config variable "core.autocrlf" without changing any
	      attributes.

	      .ft C
	      [core]
		      autocrlf = true
	      .ft

	      This  does  not  force normalization of all text files, but does
	      ensure that text files that you introduce to the repository have
	      their  line  endings  normalized	to LF when they are added, and
	      that files that are already normalized in	 the  repository  stay
	      normalized.

	      If you want to interoperate with a source code management system
	      that enforces end-of-line normalization, or you simply want  all
	      text  files  in  your  repository	 to  be normalized, you should
	      instead set the text attribute to "auto" for all files.

	      .ft C
	      *	      text=auto
	      .ft

	      This ensures that all files that git considers to be  text  will
	      have  normalized	(LF)  line  endings  in	 the  repository.  The
	      core.eol configuration variable controls which line endings  git

								4

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

	      will  use	 for  normalized  files in your working directory; the
	      default is to use the native line ending for your	 platform,  or
	      CRLF if core.autocrlf is set.

	      Note

	      When  text=auto  normalization is enabled in an existing reposi-
	      tory, any text files containing CRLFs should be  normalized.  If
	      they are not they will be normalized the next time someone tries
	      to change them, causing unfortunate misattribution. From a clean
	      working directory:

       .ft C
       $ echo "* text=auto" >>.gitattributes
       $ rm .git/index	   # Remove the index to force git to
       $ git reset	   # re-scan the working directory
       $ git status	   # Show files that will be normalized
       $ git add -u
       $ git add .gitattributes
       $ git commit -m "Introduce end-of-line normalization"
       .ft

       If any files that should not be normalized show up in git status, unset
       their text attribute before running git add -u.

       .ft C
       manual.pdf      -text
       .ft

       Conversely, text files that git does not detect can have	 normalization
       enabled manually.

       .ft C
       weirdchars.txt  text
       .ft

								5

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

       If  core.safecrlf  is set to "true" or "warn", git verifies if the con-
       version 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...

       o   git add itself does not touch the files in the work tree, the  next
	  checkout would, so the safety triggers;

       o    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;

       o   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.

       When the attribute ident is set for a path, git replaces	 $Id$  in  the
       blob  object  with  $Id:, followed by the 40-character hexadecimal blob
       object name, followed by a  dollar  sign	 $  upon  checkout.  Any  byte
       sequence	 that begins with $Id: and ends with $ in the worktree file is
       replaced with $Id$ upon check-in.

       A filter attribute can be set to a string value	that  names  a	filter
       driver specified in the configuration.

       A  filter  driver  consists  of	a  clean command and a smudge command,
       either of which can be left unspecified. Upon checkout, when the smudge
       command is specified, the command is fed the blob object from its stan-
       dard input, and its standard output is  used  to	 update	 the  worktree
       file.  Similarly,  the clean command is used to convert the contents of
       worktree file upon checkin.

       A 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  key	 phrase	 here  is "more convenient" and not "turning something
       unusable into usable". In other words, the intent is  that  if  someone
       unsets  the  filter driver definition, or does not have the appropriate
       filter program, the project should still be usable.

       For example, in .gitattributes, you would assign the  filter  attribute

								6

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

       for paths.

       .ft C
       *.c     filter=indent
       .ft

       Then    you    would   define   a   "filter.indent.clean"   and	 "fil-
       ter.indent.smudge" configuration in your .git/config to specify a  pair
       of  commands to modify the contents of C programs when the source files
       are checked in ("clean" is run) and checked  out	 (no  change  is  made
       because the command is "cat").

       .ft C
       [filter "indent"]
	       clean = indent
	       smudge = cat
       .ft

       For  best  results,  clean should not alter its output further if it is
       run twice ("clean→clean" should be equivalent  to	"clean"),  and
       multiple	   smudge   commands   should	not   alter   clean's	output
       ("smudge→smudge→clean" should be  equivalent	 to  "clean").
       See the section on merging below.

       The  "indent" filter is well-behaved in this regard: it will not modify
       input that is already correctly indented. In this case, the lack	 of  a
       smudge  filter  means  that the clean filter must accept its own output
       without modifying it.

       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
       text (again, if specified and applicable).

       In  the	check-out  codepath,  the blob content is first converted with
       text, and then ident and fed to filter.

       If you have added attributes to a file that cause the canonical reposi-
       tory format for that file to change, such as adding a clean/smudge fil-
       ter or text/eol/ident attributes, merging anything where the  attribute

								7

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

       is not in place would normally cause merge conflicts.

       To  prevent these unnecessary merge conflicts, git can be told to run a
       virtual check-out and check-in of all  three  stages  of	 a  file  when
       resolving a three-way merge by setting the merge.renormalize configura-
       tion variable. This prevents changes caused by check-in conversion from
       causing	spurious  merge conflicts when a converted file is merged with
       an unconverted file.

       As long as a "smudge→clean" results  in  the  same	 output	 as  a
       "clean"	even  on  files	 that  are already smudged, this strategy will
       automatically resolve all filter-related conflicts. Filters that do not
       act  in	this  way  may	cause  additional merge conflicts that must be
       resolved manually.

   Generating diff text
       The attribute diff affects  how	git  generates	diffs  for  particular
       files. It can tell git whether to generate a textual patch for the path
       or to treat the path as a binary file. It can also affect what line  is
       shown  on  the  hunk  header  @@	 -k,l +n,m @@ line, tell git to use an
       external command to generate the diff, or ask  git  to  convert	binary
       files to a text format before generating the diff.

       Set    A	 path  to  which the diff attribute is set is treated as text,
	      even when they contain byte values that normally never appear in
	      text files, such as NUL.

       Unset  A path to which the diff attribute is unset will generate Binary
	      files differ (or a binary patch, if binary patches are enabled).

       Unspecified
	      A path to which the diff attribute is unspecified first gets its
	      contents inspected, and if it looks like text, it is treated  as
	      text. Otherwise it would generate Binary files differ.

       String Diff  is	shown using the specified diff driver. Each driver may
	      specify one or more options, as described in the following  sec-
	      tion.  The  options for the diff driver "foo" are defined by the
	      configuration variables in the "diff.foo"	 section  of  the  git
	      config file.

	      The definition of a diff driver is done in gitconfig, not gitat-
	      tributes file, so strictly speaking this manual page is a	 wrong
	      place to talk about it. However...

								8

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

	      To  define an external diff driver jcdiff, add a section to your
	      $GIT_DIR/config file (or $HOME/.gitconfig file) like this:

	      .ft C
	      [diff "jcdiff"]
		      command = j-c-diff
	      .ft

	      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  git(1)  for
	      details.

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

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

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

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

	      .ft C
	      *.tex   diff=tex
	      .ft

	      Then, you would define a "diff.tex.xfuncname"  configuration  to
	      specify  a regular expression that matches a line that you would
	      want to appear as the hunk header "TEXT". Add a section to  your
	      $GIT_DIR/config file (or $HOME/.gitconfig file) like this:

	      .ft C
	      [diff "tex"]

								9

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

		      xfuncname = "^(\\\\(sub)*section\\{.*)$"
	      .ft

	      Note.  A single level of backslashes are eaten by the configura-
	      tion 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 occurrences 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). The following built in
	      patterns are available:

       o   bibtex suitable for files with BibTeX coded references.

       o   cpp suitable for source code in the C and C++ languages.

       o   csharp suitable for source code in the C# language.

       o   fortran suitable for source code in the Fortran language.

       o   html suitable for HTML/XHTML documents.

       o   java suitable for source code in the Java language.

       o   objc suitable for source code in the Objective-C language.

       o   pascal suitable for source code in the Pascal/Delphi language.

       o   php suitable for source code in the PHP language.

       o   python suitable for source code in the Python language.

       o   ruby suitable for source code in the Ruby language.

       o   tex suitable for source code for LaTeX documents.

       You  can	 customize  the	 rules that git diff --word-diff uses to split
       words in a line, by specifying an appropriate regular expression in the
       "diff.*.wordRegex"  configuration variable. For example, in TeX a back-
       slash followed by a sequence of letters forms a	command,  but  several
       such  commands  can  be run together without intervening whitespace. To
       separate them, use a regular expression in  your	 $GIT_DIR/config  file
       (or $HOME/.gitconfig file) like this:

							       10

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

       .ft C
       [diff "tex"]
	       wordRegex = "\\\\[a-zA-Z]+|[{}]|\\\\.|[^\\{}[:space:]]+"
       .ft

       A built-in pattern is provided for all languages listed in the previous
       section.

       Sometimes it is desirable to see the diff of a  text-converted  version
       of  some	 binary	 files.	 For example, a word processor document can be
       converted to an ASCII text representation, and the  diff	 of  the  text
       shown.  Even though this conversion loses some information, the result-
       ing diff is useful for human viewing (but cannot be applied  directly).

       The  textconv  config option is used to define a program for performing
       such a conversion. The program should take a single argument, the  name
       of a file to convert, and produce the resulting text on stdout.

       For example, to show the diff of the exif information of a file instead
       of the binary information (assuming you have the exif tool  installed),
       add  the following section to your $GIT_DIR/config file (or $HOME/.git-
       config file):

       .ft C
       [diff "jpg"]
	       textconv = exif
       .ft

	      Note

	      The text conversion is generally a one-way conversion;  in  this
	      example, we lose the actual image contents and focus just on the
	      text data. This means that diffs generated by textconv  are  not
	      suitable	for  applying.	For this reason, only git diff and the
	      git log family of commands (i.e., log, whatchanged,  show)  will
	      perform  text  conversion.  git format-patch will never generate
	      this output. If you want to send somebody a text-converted  diff
	      of  a  binary file (e.g., because it quickly conveys the changes
	      you have made), you should generate it separately and send it as
	      a	 comment  in  addition to the usual binary diff that you might
	      send.

							       11

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

       Because text conversion can be slow, especially when doing a large num-
       ber of them with git log -p, git provides a mechanism to cache the out-
       put  and	 use  it  in  future  diffs.  To  enable  caching,   set   the
       "cachetextconv"	variable in your diff driver’s config. For exam-
       ple:

       .ft C
       [diff "jpg"]
	       textconv = exif
	       cachetextconv = true
       .ft

       This will cache the result of running "exif" on each blob indefinitely.
       If  you change the textconv config variable for a diff driver, git will
       automatically invalidate the cache entries and re-run the textconv fil-
       ter.  If	 you want to invalidate the cache manually (e.g., because your
       version of "exif" was updated and now produces better output), you  can
       remove	  the	  cache	   manually    with    git    update-ref    -d
       refs/notes/textconv/jpg (where "jpg" is the name of the diff driver, as
       in the example above).

   Performing a three-way merge
       The attribute merge affects how three versions of a file is merged when
       a file-level merge is necessary during git merge,  and  other  commands
       such as git revert and git cherry-pick.

       Set    Built-in	3-way  merge driver is used to merge the contents in a
	      way similar to merge command of RCS suite. This is suitable  for
	      ordinary text files.

       Unset  Take  the version from the current branch as the tentative merge
	      result, and declare that the merge has conflicts. This is	 suit-
	      able  for	 binary	 files that does not have a well-defined merge
	      semantics.

       Unspecified
	      By default, this uses the same built-in 3-way merge driver as is
	      the case the merge attribute is set. However, merge.default con-
	      figuration variable can name different merge driver to  be  used
	      for paths to which the merge attribute is unspecified.

       String 3-way  merge  is	performed  using  the  specified  custom merge
	      driver. The built-in 3-way merge driver can be explicitly speci-
	      fied by asking for "text" driver; the built-in "take the current

							       12

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

	      branch" driver can be requested with "binary".

	      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.

	      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:

	      .ft C
	      [merge "filfre"]
		      name = feel-free merge driver
		      driver = filfre %O %A %B
		      recursive = binary
	      .ft

	      The  merge.*.name	 variable  gives  the  driver a human-readable
	      name.

	      The ‘merge.*.driver` variable’s  value  is  used  to
	      construct	 a  command  to	 run to merge ancestor’s version
	      (%O), current version (%A) and the other branches’ version
	      (%B).  These  three tokens are replaced with the names of tempo-
	      rary files that hold the contents of  these  versions  when  the

							       13

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

	      command  line  is	 built. Additionally, %L will be replaced with
	      the conflict marker size (see below).

	      The merge driver is expected to leave the result of the merge in
	      the  file	 named	with  %A by overwriting it, and exit with zero
	      status if it managed to merge them cleanly, or non-zero if there
	      were conflicts.

	      The merge.*.recursive variable specifies what other merge driver
	      to use when the merge driver is called  for  an  internal	 merge
	      between  common  ancestors,  when	 there are more than one. When
	      left unspecified, the driver itself is used  for	both  internal
	      merge and the final merge.

	      This  attribute  controls the length of conflict markers left in
	      the work tree file during a conflicted merge.  Only  setting  to
	      the value to a positive integer has any meaningful effect.

	      For example, this line in .gitattributes can be used to tell the
	      merge machinery to leave	much  longer  (instead	of  the	 usual
	      7-character-long)	 conflict  markers when merging the file Docu-
	      mentation/git-merge.txt results in a conflict.

	      .ft C
	      Documentation/git-merge.txt     conflict-marker-size=32
	      .ft

   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 git-config(1)). This attribute gives you finer control per
       path.

       Set    Notice all types of potential whitespace errors known to git.

       Unset  Do not notice anything as error.

       Unspecified
	      Use  the	value  of  core.whitespace  configuration  variable to
	      decide what to notice as error.

							       14

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

       String Specify a comma separate list of common whitespace  problems  to
	      notice in the same format as core.whitespace configuration vari-
	      able.

   Creating an archive
       Files and directories with the attribute export-ignore  won’t  be
       added to archive files.

       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 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 git-log(1), except that they	 need  to  be  wrapped
       like  this:  $Format:PLACEHOLDERS$  in  the file. E.g. the string $For-
       mat:%H$ will be replaced by the commit hash.

   Packing objects
       Delta compression will not be attempted for blobs for  paths  with  the
       attribute delta set to false.

   Viewing files in GUI tools
       The  value  of  this  attribute	specifies  the character encoding that
       should be used by GUI tools (e.g. gitk(1) and  git-gui(1))  to  display
       the contents of the relevant file. Note that due to performance consid-
       erations gitk(1) does not use this attribute unless you manually enable
       per-file encodings in its options.

       If  this attribute is not set or has an invalid value, the value of the
       gui.encoding configuration  variable  is	 used  instead	(See  git-con-
       fig(1)).

USING ATTRIBUTE MACROS
       You  do	not  want  any end-of-line conversions applied to, nor textual
       diffs produced for, any binary file you track. You would need to	 spec-
       ify e.g.

       .ft C
       *.jpg -text -diff
       .ft

       but  that  may  become cumbersome, when you have many attributes. Using
       attribute macros, you can specify groups of attributes set or unset  at

							       15

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

       the same time. The system knows a built-in attribute macro, binary:

       .ft C
       *.jpg binary
       .ft

       which  is  equivalent  to the above. Note that the attribute macros can
       only be "Set" (see the above example that sets "binary" macro as if  it
       were  an	 ordinary  attribute  --- setting it in turn unsets "text" and
       "diff").

DEFINING ATTRIBUTE MACROS
       Custom attribute macros can be defined only in the .gitattributes  file
       at  the toplevel (i.e. not in any subdirectory). The built-in attribute
       macro "binary" is equivalent to:

       .ft C
       [attr]binary -diff -text
       .ft

EXAMPLE
       If you have these three gitattributes file:

       .ft C
       (in $GIT_DIR/info/attributes)

       a*      foo !bar -baz

       (in .gitattributes)
       abc     foo bar baz

       (in t/.gitattributes)
       ab*     merge=filfre
       abc     -foo -bar
       *.c     frotz
       .ft

       the attributes given to path t/abc are computed as follows:

							       16

GITATTRIBUTES(5)				 GITATTRIBUTES(5)

       1. By examining t/.gitattributes (which is in the same directory as the
	  path	in  question),	git  finds  that the first line matches. merge
	  attribute is set. It also finds that the second  line	 matches,  and
	  attributes foo and bar are unset.

       2. Then	it examines .gitattributes (which is in the parent directory),
	  and finds that the first line	 matches,  but	t/.gitattributes  file
	  already decided how merge, foo and bar attributes should be given to
	  this path, so it leaves foo and bar unset. Attribute baz is set.

       3. Finally it examines $GIT_DIR/info/attributes. This file is  used  to
	  override the in-tree settings. The first line is a match, and foo is
	  set, bar is reverted to unspecified state, and baz is unset.

       As the result, the attributes assignment to t/abc becomes:

       .ft C
       foo     set to true
       bar     unspecified
       baz     set to false
       merge   set to string value "filfre"
       frotz   unspecified
       .ft

GIT
       Part of the git(1) suite

							       17

[top]

List of man pages available for OpenBSD

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net