22

如何生成按日期分组的提交的变更日志,格式为:

[date today]
- commit message1
- commit message2
- commit message3
...
[date day+3]
- commit message1
- commit message2
- commit message3
...
(skip this day if no commits)

[date day+1]
- commit message1
- commit message2
- commit message3
... 
[date since]
- commit message1
- commit message2
- commit message3

任何 git log 命令或智能 bash 脚本?

4

5 回答 5

28

这里很脏,但我想出的脚本的工作版本:

#!/bin/bash
# Generates changelog day by day
NEXT=$(date +%F)
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since=$DATE --until=$NEXT
    NEXT=$DATE
done
于 2010-06-05T07:45:33.350 回答
11

我无法得到接受的答案来处理今天的提交,因为我的设置在第一次迭代时没有正确处理 NEXT 变量。Git 的日志参数也将接受时间,这样就不需要 NEXT 日期:

#!/bin/bash
# Generates changelog day by day
echo "CHANGELOG"
echo ----------------------
git log --no-merges --format="%cd" --date=short | sort -u -r | while read DATE ; do
    echo
    echo [$DATE]
    GIT_PAGER=cat git log --no-merges --format=" * %s" --since="$DATE 00:00:00" --until="$DATE 24:00:00"
done
于 2011-01-17T10:40:43.107 回答
1

git log--since--until,围绕它包装一些东西应该不难。

于 2010-06-04T18:32:26.387 回答
1

那肯定需要某种脚本。
有点像这个commandline-fu

for k in `git branch|perl -pe s/^..//`;do echo -e `git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k|head -n 1`\\t$k;done|sort -r

(不完全是你所追求的,但仍然可以给你一个想法)

我知道GitStats也有按日期组织的数据(但不是提交消息)


注意:正如Jakub Narębski评论git branch的那样,该命令的一部分不适合编写脚本。或者是脚本命令的自然候选者,是管道命令。
git for-each-refgit show-ref

于 2010-06-04T18:34:02.980 回答
0

我在 python 中编写了一个脚本来创建每周的 git 日志。

您可以通过更改 timedelta 轻松将其更改为天、月等

https://gist.github.com/NahimNasser/4772132

于 2013-02-12T18:57:20.800 回答