我已经设置了Trac 1.0并与我的git repo同步。
在使用CommitTicketUpdater并尝试使用提供的语法关闭git commit的问题时:“关闭#1”或“关闭#1”或“修复#1”[哪些没有工作],我不得不重置几次分支来反转我的命令提交。每次我重置,trac失去同步,我不得不重新同步:
trac-admin / path / to / project repository resync“*”
那个狗屎很讨厌,需要一些时间才能完成。 有什么我想念的吗?有没有办法重置分支而不是松散同步?
感谢名单。
答案 0 :(得分:2)
Trac和git在不同的范例上运作。 Git非常高兴允许您通过取消提交,重新排序修订等来改变历史记录.Trac假设一个线性的,不可变的时间轴(请记住它是为Subversion设计的)。当您提交关闭故障单的消息时,故障单将在Trac的数据库中关闭。重置提交时,Trac不会返回并更新自己的时间轴以匹配新的git时间轴。重新同步是一个费力的过程(正如您所发现的那样),但这是告诉Trac时间轴已经改变的唯一方法。
解决此问题的一种方法是让Trac监视与您用于开发工作的存储库不同的存储库。只有在测试完Trac的回购后才能将其更改,并且可以相当肯定您不必还原。这将使时间轴与Trac的观点保持一致,但仍然允许您正常使用git的所有功能。
对于任何系统来说,这实际上是一个难以解决的问题。当您以影响提交打开/关闭命令(例如)的提交的方式更改git存储库的时间轴时,您可能会更改故障单的故障单编号或故障单注释的顺序。这会破坏任何现有链接或对这些项的引用。
确保您的存储库更改与问题跟踪器保持同步的一种方法是使用像bugs everywhere这样的系统,将错误列表/详细信息存储在存储库中。像这样的工具通常不像Trac那样功能齐全,但它们的分布式特性可能更适合分布式版本控制系统。
答案 1 :(得分:0)
为了使用CommitTicketUpdater,我创建了一个裸存储库并添加了以下钩子:https://gist.github.com/kenaniah/5471280(删除repo的hooks目录中没有.sh扩展名的那些并使它们可执行)。
然后我添加了一个cron作业来调用git fetch; hooks/post-fetch
,现在trac只会自动通知新的提交,无论分支结构如何。