git trac post-receive hook

时间:2013-03-20 09:44:00

标签: git trac git-post-receive

我最近已将trac从0.10升级到1.0,并成功将trac实例链接到svn和git存储库。

但是,在设置git存储库post-receive hook时遇到了一些重大问题。

我在这里尝试了插件脚本:

http://trac-hacks.org/wiki/GitPlugin#post-receivehookscripts

但这不起作用,因为git post receive似乎没有在标准输入中提供$ OLD_REV和$ NEW_REV。

维基也提到过,只需要调用以下内容

 trac-admin TRAC_ENV changeset added <commitid(s)>

所以我把以下内容放在git的接收后脚本中,

REV=$(git rev-parse HEAD)

trac-admin <trac-repo>  changeset added <repo-name> $REV 

它大部分时间都有效。但是,如果用户尝试一次推送多个提交,git rev-parse HEAD将只检索最后一个提交ID(而不是属于最后一次推送的提交ID列表),因此Trac会遗漏一些提交(来自trac db的node_change表。

我想知道是否有一些方法可以获得最新git push的所有提交ID?或者我在这里忽略了一些东西,还有一些更简单的方法可以做到这一点?

感谢。

2 个答案:

答案 0 :(得分:2)

好的,我刚刚找到了这个链接:

git: empty arguments in post-receive hook

这给了我一个很好的提示,这就是我如何解决问题

在git的post-receive中:

read oldrev newrev refname
REV=$(git rev-list $oldrev..$newrev)
trac-admin <trac-repo>  changeset added <repo-name> $REV 

P.S。这意味着修订信息确实通过标准输入传递到脚本中,只是trac插件由于某种原因无法获取它。

答案 1 :(得分:0)

请查看这个要点,以防止在使用多个分支时重复提交:

https://gist.github.com/kenaniah/5471280