如何将分支中的更改合并到主干

时间:2014-08-22 08:26:16

标签: eclipse svn version-control subversive

我在使用SVN中的分支机构时遇到了新的问题而且我遇到了问题(可能是一个概念问题)我在尝试将分支的更改合并到主干时无法理解

我将开发一个完整的例子来解释完整的问题。我正在使用Eclipse / Android和Subversive:

我使用Picture 1中显示的结构创建了一个新项目,并将其作为修订版#1 提交到https://mysubversionhost/Tests/SVNTests/trunk(忽略gen和bin文件夹)

图片1:

enter image description here

此时MainActivity.java是

package com.example.svntests;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

然后我继续在项目中工作并更新MainActivity.java,将其作为修订版#2 提交:

package com.example.svntests;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        codeA();
        codeB();
        codeC();
        System.out.println("This is a bug!");
        codeA();
        codeB();
        codeC();
    }

    private void codeA() {
        // CODE A
    }

    private void codeB() {
        // CODE A
    }

    private void codeC() {
        // CODE A
    }

}

此时我决定发布并创建标签名称 Release1.0 。此时的SVN结构显示在Picture 2修订版#3

图片2:

enter image description here

然后我继续在trunk中工作并删除对codeA()的调用,并在com.example.svntests中添加一个类OtherActivity.class。此时提交修订版#4 MainActivity.java是:

package com.example.svntests;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        codeB();
        codeC();
        System.out.println("This is a bug!");
        codeB();
        codeC();
    }

    private void codeB() {
        // CODE A
    }

    private void codeC() {
        // CODE A
    }

}

然后我发现了错误"这是一个错误!"并希望在生产中修补它。所以我切换到标签 Release 1.0 并修复它(删除打印行并将类MainController.java添加到同一个包中)并提交修订版#5

此时我想继续使用修订版#4 并修复错误。所以我切换到主干并使用合并向导将更改从分支带到主干:

enter image description here

我本来希望在我的工作副本中获得这些课程:

- MainActivity.java (With conflicts)
- OtherActivity.java
- MainController.java

但我得到了未经修改的冲突文件。见下图

enter image description here

合并后的最终状态是:

enter image description here

我缺少什么?

1 个答案:

答案 0 :(得分:3)

嗯,你对SVN常见有一些误解(我太懒了,不能将其中的一些用于Eclipse GUI)

    按照惯例,
  • / tags子树是"一次写入" - 并且所有|每个标记都必须具有内部/ tags / 的更改历史记录。如果你想修改一些标签,你有(在理想的世界):
    • 将标签复制到/ branches /
    • 补丁分支
    • 如果分支代码转到生产 - 标记分支作为新标记(可能是Release 1.1
  • 为了从bugfix的位置只将bugfix更改带入trunk,你最好只合并与bugfix相关的修订版,而不是整个历史记录(" cherry-pick merge" "同步合并")(选择3"修订",在样本中输入5)