Since git version 1.7.0, there has been a --porcelain
option for git status
. The output of:
git status --porcelain
... is designed for use by scripts - a compact representation of the output whose format will remain consistent across versions. As the man page says:
Porcelain Format
The porcelain format is similar to the short format, but is guaranteed not to change in a backwards-incompatible way between git versions or based on user configuration.
This makes it ideal for parsing by scripts. The description of the short format above also describes the porcelain format, with a few exceptions:
- The user’s color.status configuration is not respected; color will always be off.
- The user’s status.relativePaths configuration is not respected; paths shown will always be relative to the repository root.
There is also an alternate -z format recommended for machine parsing. In that format, the status field is the same, but some other things change. First, the -> is omitted
from rename entries and the field order is reversed (e.g from -> to becomes to from). Second, a NUL (ASCII 0) follows each filename, replacing space as a field separator
and the terminating newline (but a space still separates the status field from the first filename). Third, filenames containing special characters are not specially
formatted; no quoting or backslash-escaping is performed.
So, as that says, you may also want to consider using:
git status -z
... for an even more robust output format.