1

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

但是,在设置 git 存储库 post-receive 挂钩期间,我遇到了一些主要问题。

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

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

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

wiki还提到,一个只需要调用以下

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

所以我在git的post-receive脚本中放了以下内容,

REV=$(git rev-parse HEAD)

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

它在大多数情况下都有效。但是,如果用户尝试一次推送多个提交,则git rev-parse HEAD只会检索最后一次提交 ID(而不是属于最后一次推送的提交 ID 列表),因此 Trac 会丢失一些提交(来自node_changetrac 表D b)。

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

谢谢。

4

2 回答 2

2

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

git:接收后挂钩中的空参数

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

post-receivegit 中:

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

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

于 2013-03-20T10:40:17.140 回答
0

请查看以下要点,当您使用多个分支时,该要点可防止重复提交:

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

于 2013-04-27T00:19:49.980 回答