将GIT日志导出为Excel文件

39

我已经查看了论坛,但没有找到结果。

要求:

运行GIT LOG(格式)命令,并将结果写入Excel文件。

我看过一些例子,其中使用GIT Log命令可以将数据写入CSV文件,但是格式化需要双倍的工作量。

任何实用工具或方法都会有所帮助。

谢谢! Milind


1
你可以像这样做:git log --oneline | tr "\r" " > ~/gitlog.csv - ʰᵈˑ
2
这对我来说看起来并不是宽泛或离题的问题。它询问如何完成一个非常具体的任务,并且正如最高得分的答案所展示的那样,可以通过 git-log 完成。 - user2428107
这个回答解决了你的问题吗?如何生成过去一个月的git提交日志,并将其导出为CSV文件? - Holistic Developer
4个回答

65

Git提供了使用pretty选项来控制如何格式化日志输出的方法。看一下这个:

git log --pretty=format:%h,%an,%ae,%s

这将以(哈希[缩写]、作者名称、作者电子邮件、主题)的格式打印日志。

要查看所有格式选项的完整列表:

git help log

向下滚动直到看到格式选项列表。

要重定向输出,请使用以下>重定向运算符:

git log --pretty=format:%h,%an,%ae,%s > /path/to/file.csv

1
很好的提示,我现在每周使用以下命令:git log --no-merges --since='mm-dd-yyyy' --pretty=format:%h,%an,%ae,%s > c:\dev\history.csv - CF5
13
这个答案不会跳过输出。以下是如何使用空字符 (%x00)分隔列并转义内容的方法:git log --format='%h%x00%an%x00%ae%x00%s' | perl -pe 'chomp; $_ = join(",", map { s/"/""/g; "\"$_\"" } split /\0/) . "\n"' - Zalastax
1
你还可以使用%ad--date=short结合来添加日期列。 - Yaroslav Stavnichiy
1
我发现我也可以直接在格式中引用值 - git log --pretty=format:'"%h","%ad","%an","%s"' --date=iso-strict - 这样当备忘录中有逗号时就很清楚了。 - bassguy007
Excel认为一些提交ID是指数值,而另一些则是常规数字,并删除前导零。 - CivFan

34

我来分享我的看法,供有需要的人参考:

echo "commit id,author,date,comment,changed files,lines added,lines deleted" > res.csv 
git log --since='last year'  --date=local --all --pretty="%x40%h%x2C%an%x2C%ad%x2C%x22%s%x22%x2C" --shortstat | tr "\n" " " | tr "@" "\n" >> res.csv
sed -i 's/ files changed//g' res.csv
sed -i 's/ file changed//g' res.csv
sed -i 's/ insertions(+)//g' res.csv
sed -i 's/ insertion(+)//g' res.csv
sed -i 's/ deletions(-)//g' res.csv
sed -i 's/ deletion(-)//g' res.csv

将其保存为git-logs-into-csv.sh文件或仅将其复制/粘贴到控制台中。

我认为这相对比较容易理解,但以防万一:

  • --all 从所有分支获取日志
  • --since 限制我们想要查看的提交数量
  • --shortstat - 获取有关提交所做内容的一些想法

作为一个对定量数据相当着迷的人,非常感谢这个!我试过了,看起来很酷! - MikeTheSapien
谢谢,唯一的缺点是日期格式,即使使用--date=short仍然需要进行一些解析,但文件/插入/删除是值得的。 - lowercase00

0

简单

git log --pretty=format:%h,%ad,%an,%ae,%s > gitlogs.csv

0
我发现这里的答案相当不错。我根据@avs099提出的建议,修改了一个脚本,以下是为了方便参考而提供的代码:
#!/bin/bash

REPO=$1

DIR=`realpath -L ./$REPO`

echo going to compute stats for $DIR

cd $DIR


git checkout main
git pull
git log --since='last year' --date=short --pretty="%x40%h%x2C%an%x2C%ad%x2C%x22%s%x22%x2C" --shortstat | tr "\n" " " | tr "@" "\n" > res.csv


sed -i 's/ files changed//g' res.csv
sed -i 's/ file changed//g' res.csv
sed -i 's/ insertions(+)//g' res.csv
sed -i 's/ insertion(+)//g' res.csv
sed -i 's/ deletions(-)//g' res.csv
sed -i 's/ deletion(-)//g' res.csv

mv res.csv git-log.csv

awk -i inplace 'BEGINFILE{print "commit,user,date,comment,files changed,insertions,deletions"}{print}' git-log.csv

sed -i '/^$/d' git-log.csv

cd -

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接