使用--numstat和--name-status

时间:2016-08-26 17:36:51

标签: git git-diff git-commands

我正在编写一个脚本来分析更改已经变成了一个git repo。 在某些时候,我需要遍历所有提交并获取有关每个提交的信息:

  • 提交ID
  • 日期
  • 提交消息
  • ...
  • 文件已更改
    • 文件名
    • 更改类型(已添加/已修改/已删除/已重命名)
    • 新文件名(如果更改类型为"已重命名")
    • 添加的行数
    • 删除的行数

我按git log获取提交消息和日期。我遇到的问题是文件。

如果我不想收集添加/删除的行数,我只需使用

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

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

要获取有关添加/删除行的信息,我可以使用:

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一起使用。

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

感谢。

1 个答案:

答案 0 :(得分:2)

我认为您的分析(需要两个单独的命令)是正确的。使用-z获取--numstat的机器可读输出(这会禁用花哨的重命名编码所有特殊字符引用),但请注意,您必须打破以ASCII NUL而不是换行符分开。