---
name: "git-check-attr"
section: "1"
platform: "linux"
package: "git"
version: "2.56.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/git-check-attr"
---

# git-check-attr(1)

Display gitattributes information

## NAME

git-check-attr - Display gitattributes information

## SYNOPSIS

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

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

- \--cached

  Consider **.gitattributes** in the index only, ignoring the working tree.

- \--stdin

  Read pathnames from the standard input, one per line, instead of from the command line.

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

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

- \--

  Interpret all preceding arguments as attributes and all following arguments as path names.

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.

Buffering happens as documented under the **GIT\_FLUSH** option in [**git**(1)](/git/1.md). The caller is responsible for avoiding deadlocks caused by overfilling an input buffer or reading from an empty output buffer.

## 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)](/gitattributes/5.md).

## GIT

Part of the [**git**(1)](/git/1.md) suite
