我最近已将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?或者我在这里忽略了一些东西,还有一些更简单的方法可以做到这一点?
感谢。
答案 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)
请查看这个要点,以防止在使用多个分支时重复提交: