GIT-CHECK-ATTR(1)

πŸŽ€ NAME πŸŽ€

okay bestie, meet git-check-attr(1) β€” the absolute icon that displays gitattributes information. That's the whole vibe: it tells you what a gitattribute is doing on a path. No cap. ✨


🌸 SYNOPSIS 🌸

two synopsis forms, both precious:

git check-attr [--source <tree-ish>] [-a | --all | <attr>...] [--] <pathname>...
git check-attr --stdin [-z] [--source <tree-ish>] [-a | --all | <attr>...]

πŸ’– DESCRIPTION πŸ’–

For every pathname, this command will list if each attribute is unspecified, set, or unset as a gitattribute on that pathname. literally that's the whole job, and it ate. πŸ’…


✨ OPTIONS ✨

  • -a, --all β€” list all attributes that are associated with the specified paths. If this option is used, then unspecified attributes will not be included in the output. slay, but filtered.
  • --cached β€” consider .gitattributes in the index only, ignoring the working tree. index-only behavior, iykyk.
  • --stdin β€” read pathnames from the standard input, one per line, instead of from the command line. feed it paths, bestie.
  • -z β€” the output format is modified to be machine-parsable. If --stdin is also given, input paths are separated with a NUL character instead of a linefeed character. NGL, very clean for scripts.
  • --source=<tree-ish> β€” check attributes against the specified tree-ish. It is common to specify the source tree by naming a commit, branch, or tag associated with it. pick your source, periodt.
  • -- β€” interpret all preceding arguments as attributes and all following arguments as path names. this little divider is doing main character work.

If none of --stdin, --all, or -- is used, the first argument will be treated as an attribute and the rest of the arguments as pathnames.


πŸ¦‹ OUTPUT πŸ¦‹

The output is of the form:

<path> COLON SP <attribute> COLON SP <info> LF

unless -z is in effect, in which case NUL is used as delimiter:

<path> NUL <attribute> NUL <info> NUL

<path> is the path of a file being queried, <attribute> is an attribute being queried, and <info> can be either:

  • unspecified β€” when the attribute is not defined for the path.
  • unset β€” when the attribute is defined as false.
  • set β€” when the attribute is defined as true.
  • <value> β€” when a value has been assigned to the attribute.
heads up bestie: Buffering happens as documented under the GIT_FLUSH option in git(1). The caller is responsible for avoiding deadlocks caused by overfilling an input buffer or reading from an empty output buffer. 😭 don't let your pipes get weird.

🌈 EXAMPLES 🌈

In the examples, the following .gitattributes file is used:

*.java diff=java -crlf myAttr
NoMyAttr.java !myAttr
README caveat=unspecified
  • Listing a single attribute:
$ git check-attr diff org/example/MyClass.java
org/example/MyClass.java: diff: java
  • Listing multiple attributes for a file:
$ git check-attr crlf diff myAttr -- org/example/MyClass.java
org/example/MyClass.java: crlf: unset
org/example/MyClass.java: diff: java
org/example/MyClass.java: myAttr: set
  • Listing all attributes for a file:
$ git check-attr --all -- org/example/MyClass.java
org/example/MyClass.java: diff: java
org/example/MyClass.java: myAttr: set
  • Listing an attribute for multiple files:
$ git check-attr myAttr -- org/example/MyClass.java org/example/NoMyAttr.java
org/example/MyClass.java: myAttr: set
org/example/NoMyAttr.java: myAttr: unspecified
  • Not all values are equally unambiguous:
$ git check-attr caveat README
README: caveat: unspecified

🫢 SEE ALSO 🫢

gitattributes(5) β€” go read it, bestie. πŸ¦‹


πŸ‘‘ GIT πŸ‘‘

Part of the git(1) suite. iconic behavior, honestly.


✨ this page is Git 2.56.0, dated 2026-09-27 β€” the GIT-CHECK-ATTR(1) manual page. bye bestie, go check those attrs πŸ’…πŸ’–

πŸ“¦ where this page comes from