Version control hg:将变化传播到两个同等重要的分支的n倍

Version control hg:将变化传播到两个同等重要的分支的n倍,version-control,mercurial,dvcs,branching-and-merging,Version Control,Mercurial,Dvcs,Branching And Merging,我知道以前也有人问过类似的问题(关于“采摘樱桃”),但我还没有找到一个令人满意的解决方案。大多数答案似乎都假设有一个基本修订版,您可以从中进行分支以实现更改,而我实际上没有,因此我不确定设置存储库/分支的正确方法是什么 我正在为学生们可以在作业中使用的讲座创建框架;总会有学生收到的版本和正确的解决方案。这两者同等重要,没有一个是真正的“主要分支”。此外,学生们会收到每个作业框架的不同迭代,在每个作业中缓慢地向其添加功能 -- assignment 0 -----

我知道以前也有人问过类似的问题(关于“采摘樱桃”),但我还没有找到一个令人满意的解决方案。大多数答案似乎都假设有一个基本修订版,您可以从中进行分支以实现更改,而我实际上没有,因此我不确定设置存储库/分支的正确方法是什么

我正在为学生们可以在作业中使用的讲座创建框架;总会有学生收到的版本和正确的解决方案。这两者同等重要,没有一个是真正的“主要分支”。此外,学生们会收到每个作业框架的不同迭代,在每个作业中缓慢地向其添加功能

-- assignment 0 -----
                 \
                  \-- assignment 1----
                                   \
                                    \-- assignment 2 ----
基本上:

  • 转让0
    • 任务
    • 解决方案
  • 任务1
    • 任务
    • 解决方案
  • 等等
其中,每个作业都是先前作业的超集,对先前作业的文件进行了微小修改

理想的存储库/分支设置/工作流是什么,这样我就可以轻松访问框架的不同迭代和版本,并且可以轻松地将对框架的更改传播到所有其他分支

用例:

  • 将矢量库从HLSL更改为GLSL
  • 向1-3个文件添加功能
  • 像往常一样,真的吗

我认为你真正遇到的情况是,每项作业都是一个分支,每项作业都是从上一项作业中分离出来的

-- assignment 0 -----
                 \
                  \-- assignment 1----
                                   \
                                    \-- assignment 2 ----
您所做的任何更改/错误修复都将应用于最早的分配分支。然后,它将被合并到以后的任何任务中

-- assignment 0 ------------------------------------------
                 \
                  \-- assignment 1---- bugfix -------\----
                                   \                  \
                                    \-- assignment 2 --M--
我认为任务和解决方案是任务之间的中间步骤。(可能任务和分配实际上是同一件事)


这需要做一些工作,因为对于任何更改,您都有很多合并要做,但实际上您有大量的发布树。使用发布树的过程是在最早的分支中修复bug,并将其向前合并。这里没有区别。

似乎是Mercurial能够很好地处理的设置。我将维护一个简单的基本存储库,其中包含您标记增量的工作分配。通过仅将这些零件推送到公共存储库,可以仅使当前分配的零件可用。然后,所有学生都可以克隆(分叉)它,当需要新的作业时,只需告诉学生从下一个标记中提取并合并更改

因此,实际上每个学生的克隆都是一个分支,通过在基础上进行更改,然后将其向前合并来传播更改。如果存在冲突,学生将更适合处理冲突,因为他们知道自己的代码和所做的更改。(虽然他们可能不太熟悉版本控制和冲突解决,但我想让他们使用Mercurial的目的是教他们。)我不会强迫学生改变

尝试视觉表现:

                  o -- o -- o [solution1] ------------------ o [solution2]
                 /                                          /
Base: o == o == o [assignment1] == o == o [assignment2] == o == o [assignment3]
                |\                      |\
Student 1:      | o -- o -- o ------------o (merge) -- o
                \                       |
Student 2:       o -- o -- o -- o ----- o (merge) -- o -- o
我认为解决方案应该像学生们一样,从作业中分离出来。毕竟,它们基本上都是解决方案,只是这一个有官方批准的印章。将解决方案分开的另一个原因是,否则它们将与学生的变化发生巨大冲突

请注意,由于学生分支的更改从未合并回来(这实际上是不可能的),因此每次作业发生冲突的几率都会增加。因此,您可能应该尽量保持代码和学生的代码模块化,这将减少冲突的可能性