2

我们正在尝试引入我们希望是一种良好的开发实践:每次提交都必须与问题跟踪系统中的问题相关联。(为了满足这个要求,创建一个新问题是完全可以接受的。)

我们的问题跟踪器 (Redmine) 和 DVCS (Mercurial) 集成得很好,但我们有一个问题:如果开发人员需要在离线时提交某事会发生什么?目前Redmine是在线访问的,Mercurial是通过TortoiseHG(Windows)或shell(Linux)访问的。

我不知道有任何工具(例如,Windows 桌面客户端,商业或免费)允许离线使用 Redmine(创建问题,而不仅仅是查看它们)。我们甚至不介意将 Redmine 数据库复制到每个开发人员的机器上,但是同步数据库并不容易。

我们应该做什么?我可以看到以下选项:

  1. 从 Redmine 切换到具有离线支持的问题跟踪器。[我不认为 Trac 更好]

  2. 拼凑一些解决方案以在 Redmine 中离线创建问题。[不知道如何,而不是导致而不是解决问题]

  3. 放弃提交必须始终引用现有问题的想法。[但这似乎是个好主意]

  4. 追溯链接提交与问题。[这要求开发者将每个问题的描述写在一个临时位置,稍后将它们复制到Redmine,然后手动将新问题与提交链接;低效且容易出错]

  5. 禁止离线提交(因此,禁止离线工作)。[看起来很傻,考虑到如何选择 DVCS 主要是为了允许离线工作]

你的建议是什么?

4

3 回答 3

1

离线处理问题并在本地提交是一回事,而将其推送到上游(例如到指定的服务器)是另一回事。

前者可以在没有访问 redmine 的情况下完成。可能存在现有的 redmine 问题,或者需要创建新问题并将其与提交相关联。

在将更改推送到上游之前,可以通过编辑最后一次提交将多个提交折叠到一个来更新问题 ID 。后者可能是更好的选择,因为您将在每个问题上游进行一次提交 - 如果需要,可以轻松回滚。

于 2012-08-17T10:58:29.033 回答
0

在我这里,我们有与特定问题相关的提交(在错误修复提交的情况下)。系统很简单:

  1. 在提交消息中,您在方括号内键入错误编号。
  2. 当我们进行发布时,我们会收集自上次发布以来所做的所有提交。
  3. 通过正则表达式,我们提取已修复错误的 id。
  4. 我们使用此列表来更新错误数据库并创建更改日志。

我认为这里的重要教训是错误数据库和版本控制系统不必那么明确地链接。通过语法约定,它易于聚合并获得概览,这使得手动更新错误数据库变得容易(足够)。

编辑:关于“离线工作”部分。Mercurial 是一个 DVCS,并不意味着要经常连接。接受这一点,允许本地提交并在您重新上线和/或推送时处理错误数据库。

于 2012-08-17T09:14:55.610 回答
0

Redmine 有效地具有创建问题的离线能力:它可以配置为通过电子邮件接受新问题和问题更新。大多数电子邮件客户端都离线工作(将邮件暂时存储在发件箱中,直到用户上线)。

电子邮件还可以提供(非常有限的)离线查看模式。如果我通过电子邮件收到每个新问题和更新的通知,并自动将这些电子邮件移动到单独的文件夹中,我可以找到相应的问题编号。

这并不理想,但可以作为临时解决方案,直到 redmine 添加离线模式。当然,如果由太多人完成,则存在 redmine 无法很好解决的冲突风险(例如,两个人试图改变问题状态)。

DVCS 与(集中式)问题跟踪器的集成还有一个普遍且不可避免的问题。假设两个开发人员解决了某个问题,并将他们的提交链接到它。当他们都将他们的提交推送到与 redmine 相关的存储库时,在冲突解决过程中只会保留一个解决方案。该问题仍将与单个提交相关联,而没有明确表明其中一个提交实质上已被另一个提交弃用。

于 2012-08-19T16:29:06.260 回答