我们正在尝试介绍我们希望的良好开发实践:每个提交都必须与问题跟踪系统中的问题相关联。 (为了满足这一要求,创建一个新问题是完全可以接受的。)
我们的问题跟踪器(Redmine)和DVCS(Mercurial)集成良好,但我们遇到一个问题:如果开发人员需要在离线时提交某些内容会发生什么?目前,Redmine是在线访问的,Mercurial是通过TortoiseHG(Windows)或shell(Linux)访问的。
我不知道任何允许脱机使用Redmine的工具(例如,Windows桌面客户端,商业版或免费版)(创建问题,而不仅仅是查看它们)。我们甚至不介意将Redmine数据库复制到每个开发人员的机器上,但是然后同步数据库并不容易。
我们该怎么办?我可以看到以下选项:
从Redmine切换到具有离线支持的问题跟踪器。 [我不认为Trac会好得多]
将Redmine脱机创建问题解决一些问题。 [不确定如何,不引起而不是解决问题]
放弃提交必须始终引用现有问题的想法。 [但这似乎是个好主意]
将提交与问题联系起来。 [这要求开发人员在临时位置编写每个问题的描述,稍后将其复制到Redmine,然后手动将新问题与提交链接; <低效且容易出错]
禁止离线提交(因此禁止脱机工作)。 [考虑到如何选择DVCS主要是为了允许离线工作] [似乎很愚蠢]
你的建议是什么?
答案 0 :(得分:1)
处理离线问题并在本地提交以及将其推送到上游(比如指定服务器)是一回事。
前者可以在不使用redmine的情况下完成。可能存在现有的redmine问题,或者需要创建一个新问题并与提交相关联。
在推送上游更改之前,可以editing the last commit或collapsing multiple commits to one更新问题ID。后者可能是一个更好的选择,因为每个问题上游都会有一次提交 - 如果需要,可以轻松回滚。
答案 1 :(得分:0)
在我的地方,我们提交了与特定问题相关的提交(在错误修正提交的情况下)。系统很简单:
我认为这里的重要教训是bug数据库和版本控制系统不必是明确链接的。通过语法约定,它易于聚合并获得概述,这使得手动更新bug数据库变得容易(足够)。
修改:关于“脱机工作”部分。 Mercurial是一个DVCS,并不意味着经常连接。拥抱它,允许本地提交并在您重新联机和/或推送时处理错误数据库。
答案 2 :(得分:0)
Redmine有效地具有创建问题的脱机功能:可以将其配置为接受新问题并通过电子邮件发布更新。并且大多数电子邮件客户端脱机工作(将邮件临时存储在发件箱中,直到用户上线)。
电子邮件还可以提供(非常有限的)离线查看模式。如果我通过电子邮件通知每个新问题和更新,并自动将这些电子邮件移动到单独的文件夹中,我可以找到相应的问题编号。
这不是理想的,但在redmine添加离线模式之前,它可以作为临时解决方案使用。当然,如果由太多人完成,则存在冲突的风险,而redmine无法很好地解决(例如,两个人试图改变问题状态)。
DVCS与(集中式)问题跟踪器的集成还存在一个普遍且不可避免的问题。假设两个开发人员解决某个问题,并将其提交链接到它。当他们将提交推送到与redmine绑定的存储库时,在冲突解决过程中只会保留其中一个解决方案。该问题仍将与单个提交相关联,但没有明确指出其中一个提交基本上被另一个提交弃用。