Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 将承诺与问题联系起来-最佳做法_Version Control_Mercurial_Project Management_Dvcs_Redmine - Fatal编程技术网

Version control 将承诺与问题联系起来-最佳做法

Version control 将承诺与问题联系起来-最佳做法,version-control,mercurial,project-management,dvcs,redmine,Version Control,Mercurial,Project Management,Dvcs,Redmine,我们正试图介绍我们希望是一种良好的开发实践:每个提交都必须与问题跟踪系统中的一个问题相关联。(为了满足这一要求而创建新版本是完全可以接受的。) 我们的问题跟踪器(Redmine)和DVCS(Mercurial)集成得很好,但我们有一个问题:如果开发人员需要在脱机时提交一些东西,会发生什么?目前,Redmine是在线访问的,Mercurial是通过OrtoisehG(Windows)或shell(Linux)访问的 我不知道有任何工具(例如,商业或免费的Windows桌面客户端)允许离线使用Red

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

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

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

我们该怎么办?我可以看到以下选项:

  • 从Redmine切换到具有脱机支持的问题跟踪器。[我认为Trac没有那么好]

  • 整合一些解决方案,在Redmine离线时产生问题。[不确定如何解决,而不是解决问题]

  • 放弃“提交必须始终指向现有问题”的想法。[但这似乎是个好主意]

  • 追溯链接提交问题。[这要求开发人员在临时位置编写每个问题的描述,稍后将其复制到Redmine,然后手动将新问题与提交链接;效率低下且容易出错]

  • 禁止脱机提交(因此,禁止脱机工作)。[考虑到选择DVCS主要是为了允许脱机工作,这似乎很愚蠢]


  • 您的建议是什么?

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

  • 在提交消息中,在方括号内键入错误号
  • 当我们发布时,我们收集自上次发布以来的所有提交
  • 通过正则表达式,我们提取修复的bug的id
  • 我们使用此列表更新bug数据库并创建变更日志
  • 我认为这里的重要教训是,bug数据库和版本控制系统不必如此明确地联系在一起。通过语法约定,它很容易聚合并获得概述,这使得手动更新bug数据库变得很容易(足够)


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

    脱机处理问题并在本地提交是一回事,将其推送到上游(比如指定服务器)是另一回事

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


    在将更改推送到上游之前,可以在之前或之后更新问题id。后者可能是一个更好的选择,因为每个问题都有一个提交上游-如果需要,可以轻松回滚。

    Redmine有效地具有创建问题的脱机功能:可以配置为通过电子邮件接受新问题和问题更新。大多数电子邮件客户端都是脱机工作的(在用户联机之前,将邮件暂时存储在发件箱中)

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

    这并不理想,但在redmine添加脱机模式之前,它只是一个临时解决方案。当然,如果有太多人参与,则存在redmine无法很好解决的冲突风险(例如,两人试图改变问题状态)


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

    非常有趣,我不知道我可以编辑提交或折叠它们。我想这与选项4几乎相同。唯一的区别是,我们不是追溯性地将问题链接到提交,而是追溯性地编辑提交。不幸的是,我们仍然需要临时存储关于每个提交所做的事情的信息,然后将其复制/粘贴到redmine和commit消息中。但是,如果您无法访问bug数据库,您如何知道在方括号内写什么呢?如果你在离线状态下发现这个bug时它甚至还不在数据库中呢?@max with mercurial它的历史记录很容易编辑(未发布)。团队中的每个人都有不同的策略。我自己,我通常只使用一个占位符,比如
    [XXXX]
    ,直到我回到在线并检查bug数据库中的数字(或者报告bug以获取数字)。你是说开发人员在离线时发现bug的工作流吗。在仍处于脱机状态时诊断并修复问题,然后希望提交修复(仍处于脱机状态)?这听起来像是开发推动了问题跟踪系统,而不是反过来?那么当前问题的优先顺序呢?@NickPierpoint:我们正在尽可能朝着问题跟踪驱动开发的方向发展,但你的例子仍然经常发生——比如我旅行时。当然,我不知道最近的优先级变化;想必办公室里的某个人可以解决这些问题,而我至少可以做些有用的事情