2010-06-04 146 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