运行 git 带有 --numstat 和 --name-status 的差异树
Running git diff-tree with --numstat and --name-status
我正在编写一个脚本来分析对 git 存储库所做的更改。
在某些时候,我需要遍历所有提交并获取有关每个提交的信息:
- 提交 ID
- 日期
- 提交消息
- ...
- 文件已更改
- 文件名
- 更改类型(Added/Modified/Removed/Renamed)
- 新文件名(如果更改类型为 "Renamed")
- 添加的行数
- 删除的行数
我在 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 处换行而不是换行。
我正在编写一个脚本来分析对 git 存储库所做的更改。 在某些时候,我需要遍历所有提交并获取有关每个提交的信息:
- 提交 ID
- 日期
- 提交消息
- ...
- 文件已更改
- 文件名
- 更改类型(Added/Modified/Removed/Renamed)
- 新文件名(如果更改类型为 "Renamed")
- 添加的行数
- 删除的行数
我在 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 处换行而不是换行。