svn 分支的创建及合并

假如主干是这样的

a---->b------>c----->d------------>e

a b c d e 分别代表版本号

突然发现项目在版本e时引入了一个bug ,要修改这个bug,可能需要一段时间才能完成  即如果在e处直接对代码进行修改,可能会影响其他人继续进行开发,一种办法就是copy e 的代码到另一个地方(创建一个分支) ,在这个分支上修正bug 待修正好bug 后,将其合并到主干中,继续进行开发

a---->b------>c----->d------------>e-------->f ------------>g(主干继续进行正常开发)

                                                  |

                                                  |创建一个分支

                                                  V

                                                  e1 -------->f1-------->g1

 

 

分支到达g1 时,修正了bug ,这时需要将分支合并(merge)到主干中,变成如下这种状态

 

a---->b------>c----->d------------>e-------->f ------------>g  ------->   h-------->

                                                  |                                                  ^

                                                  |创建一个分支                                |

                                                  V                                                 |

                                                  e1 -------->f1--------->g1--------->

 

 

g 和g1两个代码进行合并(可能需要解决冲突才能进行合并) 成为h 然后继续进行开发

 

演示代码如下

:假如所有的项目都放在svn://localhost/java中

新建一个drp 项目 svn://localhost/java/drp

1 在本地创建目

jixiuf@jf /tmp/svnTmp $ mkdir drp/{trunk,branches,tag} 创建目录

 jixiuf@jf /tmp/svnTmp $touch drp/trunk/{hello.java,hello2.java,hello3.java}创建几个文件

jixiuf@jf /tmp/svnTmp $ tree 目录结构如下jixiuf@jf /tmp/svnTmp $ tree
.
└── drp
    ├── branches
    ├── tag
    └── trunk
        ├── hello2.java
        ├── hello3.java
        └── hello.java
4 directories, 3 files

trunk :项目的主干目录,branches 为分支目录,

然后 将项目提交到svn://localhost/java/drp中,也就是创建 svn://localhost/java/drp 项目

jixiuf@jf /tmp/svnTmp $ svn import -m "create the project drp " drp/ svn://localhost/java/drp

删除本的的drp 目录,然后从远程下载

jixiuf@jf /tmp/svnTmp $rm drp/ -rf

jixiuf@jf /tmp/svnTmp $ svn co svn://localhost/java/drp  

jixiuf@jf /tmp/svnTmp $ cd drp

jixiuf@jf /tmp/svnTmp/drp $ svn log 看一看日志, 在版本84时创建 了项目drp
------------------------------------------------------------------------
r84 | jixiuf | 2010-05-13 14:44:21 +0800 (四, 2010-05-13) | 1 行

create the project drp             ------------------------------这个是运行
svn import -m "create the project drp " drp/ svn://localhost/java/drp  时添加的日志信息
------------------------------------------------------------------------

 

 

此时的r84 就是上文说的e状态(此时发现了一个bug ,决定创建一个分支以解决这个bug )

 

jixiuf@jf /tmp/svnTmp/drp $ svn cp  -m "创建一个分支" svn://localhost/java/drp/trunk/     svn://localhost/java/drp/branches/debugDrp1.0

提交后的版本为 85。

创建一个分支并命名为debugDrp1.0

因为本地的drp 是r84 版本的,而服务器端的是r85版的,需要更新一下

jixiuf@jf /tmp/svnTmp/drp $ svn up   up 是update 的简写(svn update 命令也是一样)

jixiuf@jf /tmp/svnTmp/drp $tree 现在看一下目录结构(会发现 branches 目录下多了个debugDrp1.0目录 ,且其目录下的文件 就是trunk 目录下的文件,这个过程叫做创建分支)
.
├── branches
│   └── debugDrp1.0
│       ├── hello2.java
│       ├── hello3.java
│       └── hello.java
├── tag
└── trunk
    ├── hello2.java
    ├── hello3.java
    └── hello.java
4 directories, 6 files

jixiuf@jf /tmp/svnTmp/drp $ svn log  看一下日志记录
------------------------------------------------------------------------
r85 | jixiuf | 2010-05-13 14:51:35 +0800 (四, 2010-05-13) | 2 行

创建一个分支

------------------------------------------------------------------------
r84 | jixiuf | 2010-05-13 14:44:21 +0800 (四, 2010-05-13) | 1 行

create the project drp
------------------------------------------------------------------------

假如出现bug 的文件 是hello.java

在branches/debugDrp1.0 目录下修改hello.java

假如 这样就修改了bug

jixiuf@jf /tmp/svnTmp/drp $ echo "bug已修正" >>branches/debugDrp1.0/hello.java

就是向文件 hello.java 的末尾添加了  bug已修正 这几个字

 

为了显示如果解决冲空,在主干上也同时向hello.java 中添加一些信息,以制造冲突


jixiuf@jf /tmp/svnTmp/drp $ echo "在主干中向hello.java 添加的信息,以便产生冲突" >>  trunk/hello.java

现在向服务器提交

jixiuf@jf /tmp/svnTmp/drp $svn ci -m "modify the  hello.java in branches/debugDrp1.0 and trunk"
正在发送       branches/debugDrp1.0/hello.java
正在发送       trunk/hello.java
传输文件数据..
提交后的版本为 86。

jixiuf@jf /tmp/svnTmp/drp $ svn up  更新到最新版本86

现在 bug 已经在 branches/debugDrp1.0 中进行了修正,并且在这个过程中主干trunk 中也对文件 hello.java 进行了修改,

修正了bug 的人发现,主干中已经有了有些新变化,需要将这些新变化添加进来,

也就是将主干中的东西合并到分支 中来,

=============================================================

jixiuf@jf /tmp/svnTmp/drp $ cd branches/debugDrp1.0/   到分支debugDrp1.0的根目录

 

然后看一下日志

 

jixiuf@jf /tmp/svnTmp/drp/branches/debugDrp1.0 $svn log  查看全部日志,(注意 分支 的日志包括创建分支之前的trunk 的日志,和创建分支后在分支上发展的独立的日志 ,现在查看全部目录)
------------------------------------------------------------------------
r86 | jixiuf | 2010-05-13 15:13:23 +0800 (四, 2010-05-13) | 1 行
modify the  hello.java in branches/debugDrp1.0 and trunk
------------------------------------------------------------------------
r85 | jixiuf | 2010-05-13 14:51:35 +0800 (四, 2010-05-13) | 2 行
创建一个分支
------------------------------------------------------------------------
r84 | jixiuf | 2010-05-13 14:44:21 +0800 (四, 2010-05-13) | 1 行
create the project drp
------------------------------------------------------------------------

 

jixiuf@jf /tmp/svnTmp/drp/branches/debugDrp1.0 $svn log --stop-on-copy (这里查看他建 分支之后,在分支上独立发展的日志,不包括主干上的日志 )
------------------------------------------------------------------------
r86 | jixiuf | 2010-05-13 15:13:23 +0800 (四, 2010-05-13) | 1 行
modify the  hello.java in branches/debugDrp1.0 and trunk
------------------------------------------------------------------------
r85 | jixiuf | 2010-05-13 14:51:35 +0800 (四, 2010-05-13) | 2 行
创建一个分支
------------------------------------------------------------------------

 

jixiuf@jf /tmp/svnTmp/drp/branches/debugDrp1.0 $ svn merge svn://localhost/java/drp/trunk    将trunk 目录合并到当前目录
在 “hello.java” 中发现冲突。
选择: (p) 推迟,(df) 显示全部差异,(e) 编辑,
        (mc) 我的版本, (tc) 他人的版本,
        (s) 显示全部选项:
结果出现以下提示说hello.java 出现冲突,然后它给提供了几种解决方案,

        p 推迟,(会在hello.java 同一目录产生多个helllo.java 版本的文件 ,有r84  版的,这个是发生冲突前的版本,以及分支上的版本,trunk 上的版本,及一个进行了diff 比较后生成的) 需要手动修改hello.java 然后删除其他几个版本,然后svn ci 重新提交

        df  只是显示文件 的差异,e 编辑文件 直接解决冲突

 

此时我选e

会出现一个编辑器,其中的内容如下

    <<<<<<< .working
  bug已修正
   =======
   在主干中向hello.java 添加的信息,以便产生冲突
   >>>>>>> .merge-right.r86
~                                                                                                                           
~

意思是说当前工作( .working)的目录中hello.java 有  "bug已修正" 这一行

.merge-right.r86文件(也就是主干中的hello.java 中有这一行)  "   在主干中向hello.java 添加的信息,以便产生冲突"

合并文件为

   bug已修正
   在主干中向hello.java 添加的信息,以便产生冲突

 

冲突解决 后选r                                  

于是就将trunk 合并到了当前分支 ,查看一个

jixiuf@jf /tmp/svnTmp/drp/branches/debugDrp1.0 $ cat hello.java
bug已修正
在主干中向hello.java 添加的信息,以便产生冲突

====================================================

 

另外,虽然分支中的代码已经修正了bug 并且拥有了trunk 中最新添加 的代码

还要将它合并到trunk 中去

jixiuf@jf /tmp/svnTmp/drp/branches/debugDrp1.0 $ cd /tmp/svnTmp/drp/trunk/

jixiuf@jf /tmp/svnTmp/drp/trunk $ svn merge svn://localhost/java/drp/branches/debugDrp1.0

同样,解决冲突后就可以在trunk 中继续进行代码开发

a---->b------>c----->d------------>e-------->f ------------>g  ------->   h-------->

                                                  |                                                  ^

                                                  |创建一个分支                                |

                                                  V                                                 |

                                                  e1 -------->f1--------->g1--------->


转载自:http://blog.csdn.net/jixiuffff/article/details/5586858

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我来为您详细讲解一下 SVN 分支创建合并过程。 1. 创建分支: 首先,在 SVN 仓库中创建分支需要使用 `svn copy` 命令。假设我们要从主干分支 `trunk` 中创建一个名为 `my_branch` 的新分支,可以使用以下命令: ``` svn copy ^/trunk ^/branches/my_branch -m "Created branch for new feature" ``` 其中,`^/trunk` 表示主干分支,`^/branches/my_branch` 表示新创建分支路径,`-m` 参数用于添加一条提交日志。 2. 切换工作目录: 在创建分支后,我们需要将工作目录切换到新创建分支上。可以使用以下命令: ``` svn switch ^/branches/my_branch ``` 这样,我们就可以在新分支上进行开发工作。 3. 提交修改: 在新分支上进行开发工作后,我们需要将修改提交到 SVN 仓库中。可以使用以下命令: ``` svn commit -m "Commit message" ``` 其中,`-m` 参数用于添加一条提交日志。 4. 合并分支: 当我们在新分支上的开发工作完成后,需要将分支合并主干分支。可以使用以下命令: ``` svn switch ^/trunk svn merge ^/branches/my_branch ``` 第一条命令用于切换工作目录到主干分支上,第二条命令用于将新分支上的修改合并主干分支上。 5. 解决冲突: 在合并分支时,有可能会出现冲突。需要手动解决冲突并提交修改。可以使用以下命令查看冲突文件: ``` svn status ``` 使用文本编辑器打开冲突文件,手动解决冲突后保存文件。然后使用以下命令标记冲突已解决: ``` svn resolved file_path ``` 最后,将修改提交到 SVN 仓库中: ``` svn commit -m "Merged branch my_branch into trunk" ``` 6. 删除分支: 当分支合并完成后,可以使用以下命令删除分支: ``` svn delete ^/branches/my_branch -m "Deleted branch my_branch" ``` 这样就完成了 SVN 分支创建合并过程。希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值