2014-06-07 66 views
2

我的目標是維護存儲庫中每個文件末尾的所有提交歷史記錄/消息的日誌。我使用commit-msg鉤子來獲取提交消息,準備並將其附加到文件中。將提交消息自動追加到在Git中提交的文件中

但是,我注意到,由於文件在升級後發生變化,git狀態仍顯示爲已修改。什麼是正確的方法來做到這一點?

+4

您已經有提交歷史記錄,它是Git日誌。將Git日誌提交給Git是沒有意義的。 –

+1

要回答你的問題,你想要做的事情涉及到修改文件,這當然會顯示爲(新)未分類的更改。 –

+1

可能重複[在Git中,我如何在同一個提交中將當前提交散列寫入文件](http://stackoverflow.com/questions/3442874/in-git-how-can-i-write-the -current-commit-hash-to-a-file-in-the-same-commit) –

回答

2

雖然我同意奧利查爾斯沃斯的意見,你不應該這樣做,但它實際上是可能的。這是一個簡單的post-commit掛鉤,它重寫提交,將提交消息附加到文件「changelog」。

if ! test ${GIT_BYPASS_POST_COMMIT+set} 
then 
    export GIT_BYPASS_POST_COMMIT=1 

    git show --format=%B -s >>changelog 
    git add changelog 
    git commit --amend -C HEAD 
fi 

如果您嘗試這樣做,我希望您很快就會發現它對於正常使用git並不會很好。最簡單的例子是,如果你修改一個提交,你將會修改已經改變了的提交changelog,所以掛鉤最終複製提交信息。

這是由你來決定是否要試圖讓這個工作,或者放棄它,但我建議後者。

1

我修改了@hvd中的提交後掛接,並且能夠修改代碼以自動將提交消息詳細信息添加到簽入的文件位置。

#!/bin/sh 
path="D:/temp.txt" 
git diff HEAD~1 --name-only > ${path} 
if ! test ${GIT_BYPASS_POST_COMMIT+set} 
then 
    export GIT_BYPASS_POST_COMMIT=1 
    for line in `cat $path`; do 
     if [[ ! $line =~ version.txt ]];then 
      file_path=`dirname $line` 
      git show --format=%B -s | cut -d '#' -f2 > ${file_path}/version.txt 
      echo " - " >> ${file_path}/version.txt 
      echo $line >> ${file_path}/version.txt 
      git add ${file_path}/version.txt 
     fi 
    done  
    git commit --amend -C HEAD 
fi 

最初它會捕獲在提交期間更改的所有文件,它會保存到文件中。現在這將讀取除version.txt文件之外的文件列表中的每個文件,並將添加包含*"commit message - file name"*的version.txt並且它將再次提交到最後的提交。

注意:如果特定目錄發生更改,這些目錄將添加版本文件。

相關問題