2012-02-14 36 views
0

我的項目的目的是記錄每一個承諾由開發到MongoDB的製造。我已經建立了一個nodejs監聽器,它可以將收到的數據保存到mongo。與發送提交數據的問題後獲得通過捲曲(GIT)掛鉤

我運行gitolite服務器,每一個開發商推一次,我使用後收到鉤通過捲曲提交張貼到我的節點收聽。

我成功地做到這一點,除了初始提交,其中舊版本是0000000000000000000000000000000000000000當我嘗試運行git log時,我得到一個無效的參數。

模棱兩可的說法 '8a2db961045bd4825624b16ad62e75be49dd70b6〜1..8a2db961045bd4825624b16ad62e75be49dd70b6': 未知的修訂或路徑不工作的樹。使用' - '分隔 修訂路徑

從我的bash/post-receive腳本摘錄如下。

#!/bin/sh 
# Read git data on STDIN 
while read oval nval ref ; do 
    if expr "$ref" : "^refs/heads/"; then 
     if expr "$oval" : '0*$' >/dev/null 
     then 
      revspec=$nval 
     else 
      revspec=$oval..$nval 
     fi 
     other_branches=$(git for-each-ref --format='%(refname)' refs/heads/ | 
      grep -F -v $ref) 

     # Get the name of the repository 
     if [ $(git rev-parse --is-bare-repository) = true ] 
     then 
       REPOSITORY_BASENAME=$(basename "$PWD") 
     else 
       REPOSITORY_BASENAME=$(basename $(readlink -nf "$PWD"/..)) 
     fi 
     REPOSITORY_BASENAME=${REPOSITORY_BASENAME%.git} 

     for revision in `git rev-parse --not $other_branches | 
      git rev-list --stdin $revspec`; do 
       COMMIT_ID=$(git log $revision~1..$revision --pretty=format:'%H') 
       DATE=$(git log $revision~1..$revision --date=short --pretty=format:'%ad') 
       MSG=$(git log $revision~1..$revision --pretty=format:'%s') 
       AUTHOR=$(git log $revision~1..$revision --pretty=format:'%ae') 
       curl -s 
        -d "commit_id=$COMMIT_ID&date=$DATE&msg=$MSG&author=$AUTHOR&project=$REPOSITORY_BASENAME" 
        $LISTENER_RECEIVE 
     done 
    fi 
done 

我不完全知道如何處理這個在我的bash腳本/與我使用Git命令。

一(懶惰)選項是使用git的日誌,任何的修訂信息,並避免使用項目名稱/ git的承諾ID添加重複的承諾我的收藏。但是這對大型軟件倉庫來說會很慢。

回答

1

不知道,如果它要在這裏幫助,但在commit.sample前鉤,他們用這一招:

if git rev-parse --verify HEAD >/dev/null 2>&1 
then 
    against=HEAD 
else 
    # Initial commit: diff against an empty tree object 
    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 
fi 

這最後的散列是一個空倉庫哈希和硬編碼到混帳。