SVN书上说的:

...Another way of thinking about this pattern is that your weekly sync of trunk to branch is analogous to running svn update in a working copy, while the final merge step is analogous to running svn commit from a working copy

我找到这种办法非常不切实际在很大进展,原因有几个,主要是有关重返社会的步骤。

  1. 从SVN v1。5合并完成转的。摘樱桃的领域进行合并将导致我们解决的干分冲突的两倍(一种合并时干修订FB,并再次当合并后)。
  2. 储存库的尺寸:干的变化可能显着的一个大型代码的基础,并复制差异的文件(不同于SVN复制)从主干其他地方可能是一个重要的开销。

相反,我们做什么,我们称之为"重新分支".在这种情况下,当一块很大的躯干更改是必要的,一个新的功能分开,从目前的主干,并合并一直向下(功能分支->干->稳定的分支)。这个不一起去SVN书的准则和开发商看到它作为额外的痛苦。

你怎么处理这种情况?

有帮助吗?

解决方案 2

后研究:

经过多集思广益会议,在visionmap,F2F的讨论,包括阿尔乔姆,开SVN书的情况下,等等-它看起来像这是不可能做到的。一个功能分支是完全不喜欢的工作副本。唯一的工作方式更新它是重新建立一个新的分支,如上所述。

其他提示

从SVN v1。5合并完成转的。摘樱桃的领域进行合并将导致我们解决的干支部冲突 两次 (一种合并时干修订FB,并再次当合并)

那么你是做错了什么!

让我们看到:

trunk    fb
 ---------\
 r1-10    |
 r11-20   |
 r20-30   |

一般来说,如果你想改变做11-20,那么最好的做法是合并1-20fb 和得到的一切。

然后当fb样做,合并的20-30然后 复制 fb trunk(没有合并!).

如果你决定只合并r11:20,好吧,最后你会需要合并r1:10和20:30 然后 复制 fb的主干。

有没有办法合并改变两次!

我认为你可能做到如下:

copy trunk->fb
merge 11:20 -> fb.
merge fb-1:30 -> trunk !!!!! WRONG

你不能这样因为你会合并11时20倍。你总是应该合并代码中 只有一个方向.

正确的方式:

copy trunk->fb
merge 1:20 -> fb.
merge 21:30 -> fb (now fb=trunk+feature)
copy fb -> trunk

编辑

所以,正确的步骤是:

  1. 建立功能分支(FB)从行李箱(复制的主干特征分支svn-复制)

    FB_0=trunk_0
    
  2. 工作FB。

    FB_1=FB_0 + change_a
    
  3. 合并的所有即将发生的变化,从主干FB。

    trunk_1=trunk_0 + tr_change_a;
    FB_2 = FB_1 + (trunk_1 - trunk_0) == trunk_0 + change_a + tr_change_a
    
  4. 工作FB

    FB_3 = FB_2 + change_b
    
  5. 合并的所有即将到来 未并入的变化 从树干FB。

    trunk_2=trunk_1 + tr_change_n;
    FB_4 = FB_3 + (trunk_2 - trunk_1) == trunk_0 + change_a + change_b + tr_change_a + tr_change_b
    
  6. 在这一点上,我们有一个功能分支,由 所有 新的功能和 所有 变动的主干。因此,我们只是复制的差之间的两个分支。

    trunk_3 = trunk_2 + (FB_4 - trunk_2) = FB_4 = trunk_0 + change_a + change_b + tr_change_a + tr_change_b
    

    现在FB删除,因为继的所有变化我们的需要。

    最后一步是执行:

    svn merge /path/to/trunk@LatestRev /path/to/branches/fb@LatestRev .
    svn ci
    

    或在普通语言,采取区别之间干线和支并把他们的树干 使他们相当。

这种模式的描述 http://svnbook.red-bean.com/en/1.4/svn.branchmerge.commonuses.html#svn.branchmerge.commonuses.patterns.feature

现在如果这不能为你工作,然后我不理解这个问题。

Edit2: 为svn-1.5

当工作与svn-1.5你能合并简单得多:

当你的工作在功能的分支,你只是合并的变化,从干时间

$ svn merge /path/to/trunk
Solve conflicts
$ svn ci

它将你的FB的所有变化的主干。在结束FB运行这个程序 再一次,以确保这一切都是最新的。你去后备箱和运行

$ svn merge --reintegrate /path/to/fb
$ svn ci

在过去的一个应该没有冲突,如果你的工作所示。

我们是一个小型的公司,所以我不知道,如果我们的方案将适用于你的情况。我们做的是一个转的转归并从主干的稳定的分支。我们可以做到这2种不同的方式:-真的需要解决,我们合并之后犯下来的树干 -危险的修正/改变。我们等待一天,直到的变化是隔音在干然后我们合并

与这种连续合并我们避免吨的冲突。

我2美分。

可悲的是一切都提到可以被认为是黑客。更新从树干上的一个分支,可能导致非常严重的问题时把它带回到主干,并开辟了可能性最糟糕的所有冲突,树冲突。这是因为目录是不被视为一等公民。最好的办法是使用水银的 SVN扩展作为你的标准SVN客户。它允许继续使用SVN,同时获得电力的善变的文件夹处理。

然后在wworkstation边你可以使用一些办法提供一系列功能,以满足许多情况下超过SVN的一个。你可以使用定期修补贴队,更新从一个地方复制的主干,而不影响共有的树干以及各种其他办法。

这种方法工作的所有SVN的downn方面。我有tto开关于这一方法,因为类似情况。甚至如果你不使用这一方法立即你至少应该试一试。

我以为我的棍棒对@阿尔乔姆在这里。我也认为如果你需要

解决的主干支部冲突 两次

东西是错误的。我认为@Artyoms论/解决方案是相当稳固。

我相信一个小东西@阿尔乔姆可以写更清晰的是,在最后你在哪里"拷贝" fbtrunk 你不用 svn copysvn merge (或 svn merge --reintegrate).这可能是原因,你做不到的"复合"模式 共同分支的模式.

因为我挣扎了解你在做什么,直到现在,我不确定还有什么要说的。

这里是什么我听到:

相反,我们做什么,我们呼 "重新分支".在这种情况下,当一个 大块干变化是 需要一个新的功能分开 从目前的主干,...

现在你有一个新的分支(让我们叫它b2)就是相当于干线,对吗?和 哪里 是"重大块干变化的需要"?我假设在fb?

...和合并 总是向下(功能分支-> 树干->稳定的分支)。

但你刚刚创建b2从干线没有什么可以合并到主干的,不是吗?你是不是合并的变化,从b2fb任(因为这将是相同的,因为合并后备箱fb...).因此,如何做"重大块大块的变化"进入fb?一旦他们在那里,你为什么想到合并他们回到主干(因为这是他们来自在第一个地方)?

实际上下面的链接 本部分所谓的"跟踪合并手动" 和/或 该部分称为"合并的整个分支的另一个" 设在SVN1.4文件(我知道,你不用SVN1.4但我认为它适用于无论如何)下 共同分支的模式 可能有助于明确一些事情了。这些链接是"失踪"的1.5文件(可能是因为新的 --reintegrate 选项 merge).

你真的似乎是合并相同,改变两次我真的觉得你不应(需要)这样做。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top