我的項目的目的是記錄每一個承諾由開發到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添加重複的承諾我的收藏。但是這對大型軟件倉庫來說會很慢。