Version control 如何在层次结构中组织修订?

Version control 如何在层次结构中组织修订?,version-control,Version Control,使用版本控制时,历史记录通常看起来像一个扁平的修订链。有一些组织层次结构(我指的是分支)的基本机制,但它似乎不够灵活。在多级层次结构中组织修订的常见做法(版本控制不可知)是什么?版本控制工具特有的陷阱是什么 我将从我的实践中提供一个简单的现实世界示例,它将引导我解决这个问题 假设我想要重构一个函数/类方法。我创建了一个票证并将其命名为“重构方法ClassName.method_name()”。在研究了方法\u name()的代码之后,我将重构过程划分为子任务。为了简单起见,让我们考虑在代码中重命

使用版本控制时,历史记录通常看起来像一个扁平的修订链。有一些组织层次结构(我指的是分支)的基本机制,但它似乎不够灵活。在多级层次结构中组织修订的常见做法(版本控制不可知)是什么?版本控制工具特有的陷阱是什么

我将从我的实践中提供一个简单的现实世界示例,它将引导我解决这个问题

假设我想要重构一个函数/类方法。我创建了一个票证并将其命名为“重构方法ClassName.method_name()”。在研究了方法\u name()的代码之后,我将重构过程划分为子任务。为了简单起见,让我们考虑在代码中重命名两个具有不同含义的变量,所以我需要用两个不同的原子步骤来完成。我重命名了一个变量,保存了更改并用消息“在ClassName.method_name()中重命名了foo变量”(因为尽早提交和经常提交是好的)。我重复第二个变量:“在ClassName.method_name()中重命名了bar变量”

现在,我在问题跟踪程序中有一个票证,名为“重构方法ClassName.method_name()”,版本控制中有两个修订版:

  • “在ClassName.method_name()中重命名了foo变量”
  • “已重命名ClassName.method_name()中的bar变量”
这一问题与这两次修订的关系在哪里?我迷路了

我的目标是建立如下逻辑层次结构:

  • “重构方法ClassName.method_name()”
    • “在ClassName.method_name()中重命名了foo变量”
    • “已重命名ClassName.method_name()中的bar变量”
不用说,我正在寻找通用工作流,它将允许创建像这样的多级层次结构。层次结构的每一项都可以是修订或记录单,记录单被连续修订链固定的情况只是一种特殊情况

这是有道理的,我喜欢使用大纲视图并使用树将数据组织到层次结构中


人们如何在版本控制中做到这一点?有许多版本控制工具,每个都有其微妙之处,有些允许将第三方错误跟踪程序直接包含到存储库中,有些甚至集成了错误跟踪(如),因此请详细说明特定版本控制工具的工作流。

您需要的是所谓的功能分支,是一种非常常见的具有分布式版本控制的工作流。对于您的示例,它将是这样的:

  • 从主干创建一个名为“重构方法”的分支
  • 从“重构方法”分支中创建一个名为“重命名foo”的分支
  • 完成重命名foo的所有工作,并在执行过程中提交到“rename foo”分支
  • 将“重命名foo”合并回“重构方法”
  • 从名为“重命名栏”的“重构方法”分支创建一个分支
  • 完成重命名栏的所有工作,并在执行过程中提交到“重命名栏”分支
  • 将“重命名条”合并回“重构方法”
  • 将“重构方法”合并回主干中
用图形工具显示主干分支时,只会显示带有加号的“重构方法”或扩展它的方法,有点像这样:


. 单击加号将显示“重命名foo”和“重命名条”。再次单击将显示所有单独的步骤。此外,工作可以并行进行,人们以不同于签出的顺序签入,并且您仍将获得分层历史记录。在我的图片中,你可以看到阿诺德在艾米离开后检查了他的错误修复,但历史仍然有效。

谢谢,看起来很顺利。我预计这个工作流程至少可以与bzr、mercurial、git和fossil一起使用。但是,如何处理不支持显式分支的版本控制工具呢?我是说这里的DARC。