在分布式 VCS 中表示 "issues"

Representing "issues" in a distributed VCS

我厌倦了所有那些只能在线或通过电子邮件使用的问题跟踪系统,所以我一直在寻找在可以复制和合并的数据库中跟踪问题(因此它可以离线使用)。

为了让我的生活更轻松,我想我应该使用这样的数据库重用现有工具,于是想到了 Git。但要使其正常工作,重要的是 "merges" 不要产生太多冲突,即明智地使用 Git 合并分支的内置算法。

到目前为止,我认为给定问题中的各种消息不应该保存在文件中(将它们全部保存在一个文件中会导致该文件发生冲突,而将它们保存在单独的文件中会导致难以保持它们的顺序)但应该存储在提交消息中,因此不会因为这些消息而发生冲突,git log <issue-dir> 自然会以正确的顺序向我显示消息。

但现在的问题是我需要确保提交消息与正确的 "issue directory" 关联(我保留其余数据,即主要是问题的状态)。为此,我需要确保提交修改了该目录中的某些文件,但如果新消息不影响问题的状态,则可能没有任何文件需要更改,所以我必须人为地修改文件,这会带来引入冲突的风险。知道如何告诉 Git 一个 "empty commit" 应该与特定的子目录相关联吗?

有几个错误跟踪器在您的版本控制中工作; Bugs Everywhere 是我想到的那个。使用 Bugs Everywhere,您可以将错误报告与代码放在同一个存储库中。每个错误报告都是一个单独的文件,通常使用 be 命令行程序进行编辑。这对于您已经在存储库中进行的分支非常自然,因为您可以检出一个分支并及时查看所有错误的状态。

将错误报告存储在提交消息中似乎不太合适。你如何更新错误?您不能在不使每个后续提交都无效的情况下更新提交消息。

我不认为你可以用你的设计来防止合并冲突;你必须强制任何检测到合并冲突的人在推送之前将他们的更改重新定位到错误。

好的,我没有找到一种干净的方法来 link 一个特定目录的空提交消息,除了添加一些对我来说太难看的虚拟文件。

但我最终解决了一个略有不同的问题:我没有为每个错误单独的 目录,而是将每个错误放在它自己的 分支 .这样,就无需执行任何操作来将提交消息与特定错误相匹配。此外,这避免了人为地交错来自不同错误的提交消息,并使得 git merge 错误或在不同错误数据库之间共享某些错误子集成为可能。

如果有兴趣,我已将我的代码放在 https://gitlab.com/monnier/bugit