叶志晟 <yzs981130@xxxxxxxxx> writes: > I am experiencing a problem when parsing the results of `git status`. > My primary goal is to parse the output of `git status` > programmatically, so I am trying to parse the result of `git status > --porcelain=2 -z`. Interesting finding. Here is what I tried in my working tree, where I have a few cruft files left at the top, and ran these commands inside the 't/' subdirectory: $ git status --porcelain=1 ?? +ps8-v2-reftable-iterator-reuse ?? :runme.sh : git t/master; git status --porcelain=2 ? ../+ps8-v2-reftable-iterator-reuse ? ../:runme.sh : git t/master; git status --porcelain=1 -z | tr '\0' '\n' ?? +ps8-v2-reftable-iterator-reuse ?? :runme.sh : git t/master; git status --porcelain=2 -z | tr '\0' '\n' ? +ps8-v2-reftable-iterator-reuse ? :runme.sh I haven't dug into the history to see if these inconsistencies in behaviour are deliberate, but I somehow suspect that the output from "--porcelain=2" without "-z" is mistaken. As the porcelain output is designed to be machine parseable with or without "-z" (and the reader of the output, the implementation of a Porcelain command, is responsible for turning it into relative if it prefers), it would be a mistake to turn relative output on based on the lack of "-z". Not that we can "fix" the output from "--porcelain=2" at this point. To changge them to uniformly show absolute (or relative for that matter), we'd need "--porcelain=3" to preserve these inconsistency output because it is very certain that existing users and scripts already rely on it. Thanks.