【问题标题】:git trac post-receive hookgit trac 接收后挂钩
【发布时间】:2013-03-20 09:44:00
【问题描述】:

我最近将 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_change trac db 表)。

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

谢谢。

【问题讨论】:

    标签: git trac git-post-receive


    【解决方案1】:

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

    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 
    

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

    【讨论】:

    • 您不会碰巧知道如何在 Windows 上执行此操作,不是吗?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-28
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 2012-08-08
      • 2012-01-24
      • 2010-11-09
      • 1970-01-01
      相关资源
      最近更新 更多