运行 git 带有 --numstat 和 --name-status 的差异树

Running git diff-tree with --numstat and --name-status

我正在编写一个脚本来分析对 git 存储库所做的更改。 在某些时候,我需要遍历所有提交并获取有关每个提交的信息:

我在 git log 之前收到了提交消息和日期。我遇到的问题是文件。

如果我不想收集行数 added/removed,我只需使用

git diff-tree --no-commit-id --name-status -M -r abcd12345

输出类似于

A   Readme.md
M   src/something.js
D   src/somethingelse.js
R100    tests/a/file.js tests/b/file.js

我可以通过编程方式解析和读取。

要获取有关行 added/removed 的信息,我可以使用此方法:

git diff-tree -M -r --numstat abcd12345

输出如下:

abcd12345
82  0   Readme.md
41  98  src/something.js
0   64  src/somethingelse.js
0   0   tests/{a => b}/file.js

对于重命名的文件,这不是机器可读的。

我的问题是:有没有办法把这两个命令结合起来?看来我不能将 --numstat--name-status 一起使用。

我可以 运行 两个单独的命令并将结果也合并到我的脚本中。在那种情况下,是否有任何其他开关可用于使第二个命令的结果更具机器可读性?

谢谢。

我认为您的分析(您需要两个单独的命令)是正确的。使用 -z 通过 --numstat 获得机器可读的输出(这会禁用奇特的重命名编码 所有特殊字符引用),但请注意,您随后将必须在 ASCII NUL 处换行而不是换行。