从 git log --stat 的输出中缩写路径名前缀

Abbreviating pathname prefixes from the output of git log --stat

当我 运行 git log --stat 在大多数更改发生在层次结构深处的同一子树中的存储库上时,我可能会得到这样的信息:

$ git log --stat
commit xxxxxxx
Author: xxx
Date:   xxx

    commit message

.../toplevel/networking/services/cool_analysis/Makefile    |  10 ++
.../networking/services/cool_analysis/cool_analysis_main.c | 209 +++............
.../subdirectory/util/cool_analysis_helper.c               | 112 +++.......

所有东西都共享公共前缀 xxx/toplevel/networking/services/cool_analysissubdirectory 是 运行 的下一个)但是 git log --stat 的输出让人很难认清这个事实,因为缩写了不同数量的路径名前缀。相反,我想要这样的东西:

$ git log --stat --strip=xxx/toplevel/networking/services/cool_analysis
commit xxxxxxx
Author: xxx
Date:   xxx

    commit message

.../Makefile                                 |  10 ++
.../cool_analysis_main.c                     | 209 +++............
.../subdirectory/util/cool_analysis_helper.c | 112 +++.......

有办法得到这个吗?手册似乎没有任何关于它的内容,并且 post-用 sed 或其他东西处理输出很难,因为路径名已经缩写了。 (git log --name-only 提供未缩写的完整路径名,但不提供统计信息。)

你可以试试这个:

git log --stat --oneline --relative=[path]

--relative[=<path>]

When run from a subdirectory of the project, it can be told to exclude changes outside the directory and show pathnames relative to it with this option. When you are not in a subdirectory (e.g. in a bare repository), you can name which subdirectory to make the output relative to by giving a as an argument.


这里有 2 个不同的截图。

您可以为此使用 --relative 参数。

git log --stat --relative=xxx/toplevel/networking/services/cool_analysis

如果您已经在正确的目录中,则无需提供 --relative 的路径。