2010-06-04 149 views
19

的changelog天如何产生的提交日期更改日志电邮宣传,格式:混帐:由

[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的日志命令,或智能bash脚本?

+1

如果什么commitdate非单调,由于时钟偏移/贡献者的一个错误配置的时钟将其更改为天? – 2010-06-05 12:38:35

回答

22

这里脏了,但剧本的工作版本,我想出了:

#!/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

只需在循环中使用一个管道:'produce-and-sort-dates |同时阅读日期;做...; done'。顺便说一句,你可能需要'Git_PAGER = cat git log ...'作为第二个(为了防止在整个脚本的输出到终端时使用寻呼机)* git log *。此外,您可能希望与'--no-merges'保持一致,否则,如果一天中的所有提交都合并,则可能会在没有任何提交的情况下获取[[date]]标头。 – 2010-06-05 20:36:44

+0

谢谢克里斯。我已经更新了代码。 (以前我试图在循环结尾添加管道) – takeshin 2010-06-05 21:19:36

+0

我挖了它。谢谢。 – 2012-01-09 23:08:12

1

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

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-refgit show-ref是脚本命令的自然候选者,是管道命令。

+0

感谢您提供丰富的答案。还有一件事我需要知道:如何列出特定日期的所有提交:'git log --since =“2010-06-02”--until =“2010-06-02”'list nothing 。 – takeshin 2010-06-04 19:32:49

+0

@takeshin:你试过'git log --since =“2010-06-02”--until =“2010-06-03”'? (从一天 - 02 - 到另一个 - 03 - ) – VonC 2010-06-04 19:38:21

+0

@VonC,是的,但在简单的循环中,我只知道日期,而不是下一个日期。 – takeshin 2010-06-04 19:40:42

8

我无法接受的答案来处理今天的人员犯我的设置没有妥善处理的下一个变量第一次迭代。 Git的日志参数将接受时间太长,它不需要为下一个日期:

#!/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 
+0

这真的很不错。唯一的事情是echo [$ DATE]不起作用,因为它试图评估一个表达式或其他。所以只需删除括号,它很好 – Yanis 2015-03-03 09:40:20