让git diff –stat显示完整的文件path
在做的git diff --stat
一些文件列出了从库基地的完整path,但一些文件被列为:
.../short/path/to/filename.
这是path开始...
只显示短path。
我想git diff
列出所有文件的完整文件path,以便通过脚本轻松处理。 有什么办法可以让git diff
始终显示完整path
git diff
命令将采用可选值--stat
:
--stat[=<width>[,<name-width>[,<count>]]] Generate a diffstat. You can override the default output width for 80-column terminal by --stat=<width>. The width of the filename part can be controlled by giving another width to it separated by a comma. By giving a third parameter <count>, you can limit the output to the first <count> lines, followed by ... if there are more. These parameters can also be set individually with --stat-width=<width>, --stat-name-width=<name-width> and --stat-count=<count>.
(对于脚本,你可能想直接使用git diff-tree
,因为它更像是一个“pipe道”命令,尽pipe我怀疑你会没事的。注意,当你使用git diff-tree
时候,你需要使用和--stat
相同的额外文本git diff-tree
。使用git diff
“porcelain”前端和git diff-tree
plumbing命令之间的本质区别是, git diff
查找diff.renames
选项的configuration设置,以决定是否执行重命名检测。 ,如果你比较一个提交与索引,例如,加上前端的git diff
会做等价的git diff-index
。换句话说, git diff
读取你的configuration并自动调用正确的pipe道 。
对于脚本处理,最好使用以下方法之一:
# list just the file names git diff --name-only path/to/modified/file path/to/renamed/file # list the names and change statuses: git diff --name-status M path/to/modified/file R100 path/to/existing/file path/to/renamed/file # list a diffstat-like output (+ed lines, -ed lines, file name): git diff --numstat 1 0 path/to/modified/file 0 0 path/to/{existing => renamed}/file
当与使用NUL
作为字段终止符的-z
选项结合使用时,这些方法对于强大的脚本处理变得更加方便。
对于Bash用户,可以使用$COLUMNS
variables自动填充可用的terminal宽度:
git diff --stat=$COLUMNS
很长的path名称可能仍会被截断; 在这种情况下,可以使用--stat-graph-width
来减小+++ / —部分--stat-graph-width
,例如,将其限制为terminal宽度的1/5:
git show --stat=$COLUMNS --stat-graph-width=$(($COLUMNS/5))
对于更通用的解决scheme,您可以使用输出tput cols
的输出来确定terminal宽度。
我发现diff -stat的行为在git 1.7.10的某个地方发生了变化,默认情况下,它会将文件path缩短到一个固定的宽度,现在它显示的就和你的terminal窗口允许的一样多。 如果遇到此问题,请确保升级到1.8.0或更高版本。