如何生成按日期分组的提交更改日志,格式为:
[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脚本?
答案 0 :(得分:23)
这是脏的,但我提出的脚本的工作版本:
#!/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
答案 1 :(得分:9)
由于我的设置在第一次迭代时没有正确处理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
答案 2 :(得分:1)
git log
有--since
和--until
,围绕这个问题包装起来应该不难。
答案 3 :(得分: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还有按日期组织的数据(但不是提交消息)
注意:此命令的git branch
部分不适合编写脚本,因为Jakub Narębski注释。
git for-each-ref
或git show-ref
是脚本命令的自然候选者,是管道命令。
答案 4 :(得分:0)
我在python中编写了一个脚本来创建一个一周一周的git日志。
您可以通过更改timedelta
轻松将其更改为天,月等