使用Git提交信息在Trac中关闭问题单

4
我尝试使用Trac与Git。
  1. 我配置了Git插件 - 它在“浏览源”选项卡中正确显示存储库和更改集。
  2. 打开CommitTicketUpdater插件,进行配置:关闭身份验证,设置不使用任何括号,将关键字保留为默认设置。
  3. 添加了一些票据。
  4. 完成包含“close#5”的消息的提交。

Trac看到票号(在更改集中标为红色并链接到票号),但未关闭第5号票。可能出了什么问题?

TIA


你能否发布一下你目前用于提交后钩子脚本的代码? - bta
/usr/local/bin/trac-admin /home/trac/project changeset added "$1" "$2" - alekwisnia
@alekwisnia- 这是在你的仓库的 hooks/post-commit 中吗?还是在一个被 post-commit 调用的单独脚本中? - bta
它在.git/hooks/post-commit中(因此在存储库内部)。 - alekwisnia
我认为你的脚本根本没有运行。请查看下面我的评论,检查一下几个问题。 - bta
5个回答

0

你是如何使用trac仓库的?通常情况下,你需要在一个服务器上运行trac,并将代码推送到该服务器。由于push后并不会运行post-commit hook,因此此时需要一个post-receive hook。

我对git-plugin包中的post-receive hook进行了一些修改,因为它存在一些bug(例如,在trac中只能每秒钟更改一个ticket,因此我必须添加sleep(1),以防止所有提交都在同一秒钟内被处理。同时,你也可以提供工作小时数)。

这个post-receive hook可以在我的github上找到:https://github.com/JensTimmerman/TRAC-SVN-to-GIT-migration/blob/master/hooks/trac-post-receive-hook.py

你需要将此hook安装到/path/to/your/.git/hooks/post-receive,并确保其可执行(chmod +x /path/to/your/.git/hooks/post-receive for linux),并将"TRAC_ENV = '/home/jens/tractest/'"更改为指向你的trac环境。

编辑:

如果您的git存储库不在与trac运行的同一台服务器上,您可以将其拉到临时git存储库中,然后使用cron作业将其推回trac使用的存储库。这将再次触发真实存储库上的post-receive钩子并更新您的trac。

我已经做好了这个:

a64609@chaos:~/git$ ls
gitcron.log  realrepo  syncgit.sh  tmprepo

其中tmprepo只是我拉取和推送的位置,而realrepo具有我的post-receive钩子。 使用syncgit.sh:

cd /home/username/git/tmprepo;
git pull;
git push real;

而且tmprepo的远程'real'设置为

a64609@chaos:~/git/tmprepo$ git remote -v show
origin  https://JensTimmerman@github.com/hpcugent/easybuild.git
real    ../realrepo/

而且所有的东西都会通过 crontab 条目同步(将其放入 crontab -e 中)

*/3 * * * * /hhome/username/git/syncgit.sh  >> /home/username/git/gitcron.log 2>&1

这里有一个想法:在带有Trac的服务器上创建一个裸克隆镜像(带有必要的post-receive hook)。您可以使用cron作业每小时推送到镜像。 - Adam Monsen
这里有一个更好的方法,使用您的本地仓库,并在达到某些稳定形式时将其推送到服务器(使用post-receive钩子)。 - Jens Timmerman
1
没错,如果你将git仓库托管在与Trac相同的服务器上,那么它可以工作。所以我会说“不同”,而不是“更好”。:) 我的建议很方便,如果你的仓库托管在其他地方(比如Github)。 - Adam Monsen
2
AdamMonsen:你说得对,事实上我自己也是这样设置的。我没有考虑过这是否是解决问题的最佳方法,但既然你提到了它,我就把它加入了我的答案。 - Jens Timmerman

0
如果我遵循文档,你应该尝试使用closes#5。如果仍然无法工作,请检查后提交挂钩是否正确配置#XXX是标准的Trac / Wiki语法,用于引用XXX票证,而[YYYY]将引用YYYY提交,即使没有定义后提交挂钩,它也总是有效的。
务必通过按照此链接的说明激活后提交挂钩。

@alekwisnia:看起来提交后钩子没有正确配置或启动。 - Cédric Julien
@Cédric Julien:看起来,这个网站上的链接已经失效了。我明白我应该在.git/hooks/post-commit中添加一些代码行。 - alekwisnia
1
如果您想验证您的提交后挂钩是否正确启动,请在其末尾添加类似以下内容的行:date >> /home/username/hook.log(请确保列出的文件可由所有用户进行写入)。这将在每次运行挂钩时向指定的日志文件添加时间戳。进行测试提交并查看是否记录了新的时间戳。 - bta
好的,我已经完成了,但没有结果(日志文件中没有写入日期)。 - alekwisnia
那个文档链接是关于Subversion集成的,而不是Git。 - peller
显示剩余5条评论

0

我放弃了Trac,转而使用Redmine。现在好了一点——提交与给定的票证ID引用到票证,但是,“fixes #1”仍然不能关闭1号票证……据我所知,Redmine不需要钩子。


是有点傻,Trac需要一个运行"trac-admin TRAC_ENV changeset added" 的git后置钩子。它可以定期检查新的提交而不需要这样做。 - Adam Monsen

0

我曾经遇到过同样的问题。Git CommitTicketUpdater 插件似乎默认需要在术语周围加上方括号,例如 [closes #5]。此外,请参阅此 博客文章 中的 trac.init 以获取 commit_ticket_update_envelope


0
如果有帮助的话,我在我的trac ini中填写了以下内容:
[ticket] commit_ticket_update_commands.close = close 官方文档声称,如果您将'commit_ticket_update_commands.close ='留空,则提交者更新将使用一些默认关键字来决定是否必须关闭票证,但这对我不起作用。唯一有效的方法是在该字段中明确设置某个关键字,例如(commit_ticket_update_commands.close = close)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接