使 Git 日志统计信息有自己的列?

Making Git log stats have their own column?

我正在尝试制作一个 .csv 输出文件,其中包含有关存储库历史的信息,然后可以使用 excel 或类似程序在外部对其进行操作。我当前使用的命令是: git log --pretty=format:"%h%x09%an%x09%ad%x09%s" --author=x --numstat --sparse --cc --date=local folder > test.csv

有什么方法可以在单独的列中获取 numstat 输出,至少远离提交哈希码列? 谢谢

简短的回答并不令人满意:不,没有办法做到这一点。

但是,有一个简单(如果有点慢)的解决方法。任何时候 Git 的现有输出格式不令人满意,您可以:

  1. git rev-list替换git log(包括它的大部分选项),排除任何面向格式和输出选择的git log选项,并添加HEAD 如果你没有列出任何分支名称。在这种情况下会产生:

    git rev-list --author=x --sparse folder HEAD
    
  2. 读取此命令的输出。它包含您要检查的每个提交的哈希 ID。您现在可以 运行 一个或多个命令,例如:

    git log --no-walk --pretty=format:... --cc --numstat <hash>
    

    并通读他们的输出,将输出转换为您喜欢的格式。 (您可以使用 git log -1 而不是 git log --no-walk,但至少我更喜欢 --no-walk 作为说明。)

一次提交而不是集体提交的唯一原因是,当集体提交时,试图解析输出并将其重新格式化为您喜欢的任何格式的程序通常不能区分直接来自 git log 的输出和存储在提交消息正文中的文本,因为后者可以模仿前者。如果您的输出得到充分控制——在这种情况下,它可能是:%s 文本将全部在一行上,不像 %b%B——您可以省去单独的 git rev-list,但您仍然需要一个程序来读取输出并将其转换为您喜欢的格式。

一个简单的 程序可能就足够了,所以:

git log --pretty=format:"%h%x09%an%x09%ad%x09%s" --author=x \
    --numstat --sparse --cc --date=local folder | awk ... > test.csv

可能会奏效。编写简单的 awk 程序对您来说是一个练习,或者是发布到 的问题的素材。 (提示:考虑在 --pretty=format: 行中添加一个有区别的第一个字符,因为您知道 --numstat 会为每一行生成一个数字作为其第一个输出字符。)