我的项目的目的是记录每一个承诺由开发到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添加重复的承诺我的收藏。但是这对大型软件仓库来说会很慢。