详细说明svn分支与合并,以及实例

详细说明svn分支与合并,以及实例
一,svn分支与合并有什么用? 

作程序的,对svn在熟悉不过了,但对svn分支熟悉的,我想并不多。因为一般情况下,是用不着svn分支的,其实也没有那个必要。下面我例举几个需要用到svn分支的情况:

1,比较大的项目。比较大的项目,一般情况下会分成几个阶段来完。好比什么五年计划。到了某个阶段时,我建立一个分支,当个备份。万一将来开发下个阶段东西的时候,出现致命错误的时候,我还能把这个分支拿出来接着用。 

2,项目要开发新的东西,但是又不想和主干冲突,建立一个分支,单独做为一个开发分支。这样做也是为了责任明确。如果出了问题也好有所查证。 

二,创建svn分支 

在说创建分支前,关于svn的安装和配置,请参考linux svn安装和配置,不结合apache 

1,创建一个代码文件夹main 

[[email protected] repos]# pwd
/home/zhangy/checkout/repos
[[email protected] repos]# svn add ./main
A         main
A         main/test.php
[[email protected] repos]# svn commit ./main -m "test"
Adding         main
Adding         main/test.php
Transmitting file data .
Committed revision 5. 

2,创建分支 

[[email protected] repos]# svn copy svn://127.0.0.1/repos/main svn://127.0.0.1/repos/branch -m "test" 

Committed revision 6. 

3,查看分支情况 

[[email protected] repos]# svn log -v ./branch/test.php
------------------------------------------------------------------------
r6 | zhangy | 2010-10-24 19:59:35 +0800 (Sun, 24 Oct 2010) | 1 line
Changed paths:
A /branch (from /main:5) 

test
------------------------------------------------------------------------
r5 | zhangy | 2010-10-24 19:53:20 +0800 (Sun, 24 Oct 2010) | 1 line
Changed paths:
A /main
A /main/test.php 

test
------------------------------------------------------------------------ 

4,注间事项: 

a),创建分支,只能在同一个仓库内进行,跨仓库是不行的。会提示svn: No repository found in ‘svn://127.0.0.1‘ 

b),创建分支时,注意加上注释,不然会报以下错误。 

[[email protected] repos]# svn cp svn://127.0.0.1/repos/main svn://127.0.0.1/repos/branch
svn: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options
svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no ‘editor-cmd‘ run-time configuration option was found 

三,合并分支 

下面讲一个例子,来说明怎么合并分支。我觉得通过例子,最能让人学到东西了,我在我的博文一在强调这一点。 

1,修改main中的文件提交到svn服务器端,这样main的代码就和branch分支的代码就不一样了。 

2,把main文件中的文件同步到分支中branch中 

[plain] view plaincopy  [[email protected] branch]# pwd      //是否在分支的文件夹中
/home/zhangy/checkout/repos/branch
/**
把main的修改同步到branch分支中
如果是指定版本的可以svn merge -r 9:10 svn://127.0.0.1/repos/main
*/
[[email protected] branch]# svn merge svn://127.0.0.1/repos/main
--- Merging r6 through r8 into ‘.‘:     //更新到第8个版本
U    test.php
[[email protected] branch]# svn log -v test.php   //查看test.php,从下面我们可以看出,分支版本还是没有变为什么呢?
------------------------------------------------------------------------
r6 | zhangy | 2010-10-24 19:59:35 +0800 (Sun, 24 Oct 2010) | 1 line
Changed paths:
 A /branch (from /main:5)   

test
------------------------------------------------------------------------
r5 | zhangy | 2010-10-24 19:53:20 +0800 (Sun, 24 Oct 2010) | 1 line
Changed paths:
 A /main
 A /main/test.php   

test
------------------------------------------------------------------------
[[email protected] branch]# svn commit -m "test"   //提交
Sending        .
Sending        test.php
Transmitting file data .
Committed revision 9.
[[email protected] branch]# svn log -v test.php   //是没因为没有提交,提交后会产生一个新的版本
------------------------------------------------------------------------
r9 | zhangy | 2010-10-24 20:52:22 +0800 (Sun, 24 Oct 2010) | 1 line
Changed paths:
 M /branch
 M /branch/test.php   

test
------------------------------------------------------------------------
r6 | zhangy | 2010-10-24 19:59:35 +0800 (Sun, 24 Oct 2010) | 1 line
Changed paths:
 A /branch (from /main:5)   

test
------------------------------------------------------------------------
r5 | zhangy | 2010-10-24 19:53:20 +0800 (Sun, 24 Oct 2010) | 1 line
Changed paths:
 A /main
 A /main/test.php   

test
------------------------------------------------------------------------   

到这儿合并基本上就结束了。 

3,上面说的是将主干的文件同步到分支中去,把分支的内容同步步主干也是一样的,倒过来就行了。 

4,全并的时候,有可能会冲突的,看下面 

[plain] view plaincopy  [[email protected] main]# svn merge svn://127.0.0.1/repos/branch
Conflict discovered in ‘test.php‘.    //提示有冲突
Select: (p) postpone, (df) diff-full, (e) edit,       //在这里让你选择处理方式
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: p
--- Merging r7 through r12 into ‘test.php‘:
C    test.php
Summary of conflicts:
Text conflicts: 1       //虽然有冲突,但是还是可以同步了,也说明同步成功了。   

--- /tmp/tempfile.2.tmp    Sun Oct 24 21:02:11 2010
+++ .svn/tmp/test.php.tmp    Sun Oct 24 21:02:11 2010
@@ -0,0 +1,9 @@
+<<<<<<< .working
+asdfadfadfadf
+111111111111111
+=======
+asdfadfadfadf
+111111111111111
+222222222222
+
+>>>>>>> .merge-right.r12   
时间: 2024-10-10 06:10:49

详细说明svn分支与合并,以及实例的相关文章

详细说明svn分支与合并---命令行

一,svn分支与合并有什么用? 作程序的,对svn在熟悉不过了,但对svn分支熟悉的,我想并不多.因为一般情况下,是用不着svn分支的,其实也没有那个必要.下面我例举几个需要用到svn分支的情况: 1,比较大的项目.比较大的项目,一般情况下会分成几个阶段来完.好比什么五年计划.到了某个阶段时,我建立一个分支,当个备份.万一将来开发下个阶段东西的时候,出现致命错误的时候,我还能把这个分支拿出来接着用. 2,项目要开发新的东西,但是又不想和主干冲突,建立一个分支,单独做为一个开发分支.这样做也是为了

实例讲解SVN分支和合并问题(转)

本节向大家简单描述一下SVN分支和合并方面的知识,在学习SVN的过程中SVN分支和合并时经常遇到的问题,在这里和大家分享一下,希望本文对大家有用. 关于主线同SVN分支合并的概念及如何使用的误区此问题是在netbuddy的问题上研究而成,走出误区的过程中得到了pcplayer指点迷津.   一.我的合并需求 在主线的第54个版本上作了分支,在接下来的日子里,主线和分支同时都有修改,此时需要将分支上的改动合并到主线上,合并前主线和分支都已经提交,截至到合并前,主线的修改达到了版本号66,而分支的修

SVN 分支及合并的介绍和实践---命令行

写在前面 一些相关的概念和原理 进行分支开发的最佳实践 合并的分类 在 Eclipse 中进行合并操作 相关资源 写在前面 本文是由演讲整理而来的,介绍了 SVN 分支与合并的概念.流程和一些实际操作方法,适合对版本控制有基本认识然后想了解 SVN 分支与合并的使用方法的读者. 对应 SVN 版本最低为 1.5,因为分支.合并的很多功能都是 1.5(release notes ) 才加进来的. 一些相关的概念和原理 分支(branch)和标记(tag)对于 SVN 来说就只是副本(copy),没

SVN分支的合并和同步

使用svn几年了,一直对分支和合并敬而远之,一来是因为分支的管理不该我操心,二来即使涉及到分支的管理,也不敢贸然使用合并功能,生怕合并出了问题对团队造成不良影响,最主要的原因是,自己对分支的目的和合并的方法不甚了解,这才是硬伤. 最近由于适配机型的需要(本人从事手机客户端的开发),需要经常接触分支和合并两项工作,突然发现这玩意整不明白很难开展工作,遂这两天着重研究了一下,有点收获,怕以后忘了,故趁着余温尚在赶紧写下来,好记性不如烂笔头嘛.下文的实践主要是参考了TortoiseSVN的帮助文档和S

SVN分支与合并

最近由于工作原因接触了SVN的分支,现在做一下笔记,以便查阅. 关于SVN分支的重要性我就不多说了,网上有很多答案,可以自行查找. 我用的svn版本是TortoiseSVN 1.8.8 1.建立分支鼠标右键你的本地项目文件夹,依次选择 TortoiseSVN --> Branch/tag 出现以下弹框,在 To path 里面填写分支的地址,只需把主干的文件名替换成分支的文件名就好,在本地和svn不需要新建文件夹,否则点击ok时会提示目录已存在:然后添加log:选择HEAD revision i

eclipse svn分支与合并操作

以前做项目的时候没有用过svn的分支合并操作,今天用到了,刚开始还真不会啊.最后查了下就是这么的方便.专门记录下来. 原文来自:http://blog.csdn.net/lisq037/article/details/17501327 还可以参考如下几篇文章 http://toptree.iteye.com/blog/1143328 http://www.cnblogs.com/wenlong/archive/2012/05/07/2586853.html 要在svn主干上创建分支,用分支来进行

svn 分支与合并的使用

在使用svn的时候我们往往有这样的需求.我们修改某些代码,因为对某项技术不是非常的熟悉,担心自己当前的修改(或者叫测试)会影响到服务器中版本库代码的崩溃等.传统做法我们会手动复制一份代码,然后修改如果修改成功则提交到服务器版本库,否则直接删除.      这样做一定程度上满足了要求,但一个问题是在你进行测试修改的时候版本库可能已经更新了n个版本了.那当你的实验完成后再提交到版本库区的时候就可能会有非常多的冲突.而且在你实验的过程中可能也会有很多的中间结果需要保存,如果无法提交,那一旦自己机器出现

svn branch and merge(svn切换分支和合并)详解

下文的实践主要是参考了TortoiseSVN的帮助文档和Subversion的在线文档,Subversion的在线文档:http://svnbook.red-bean.com/en/1.5/svn-book.html 先说说什么是branch.按照Subversion的说法,一个branch是某个development line(通常是主线也即trunk)的一个拷贝,见下图: branch存在的意义在于,在不干扰trunk的情况下,和trunk并行开发,待开发结束后合并回trunk中,在bran

SVN使用教程之-分支/标记 合并 subeclipse

首先说下为什么我们需要用到分支-合并.比如项目demo下有两个小组,svn下有一个trunk版.由于客户需求突然变化,导致项目需要做较大改动,此时项目组决定由小组1继续完成原来正进行到一半的工作[某个模块],小组2进行新需求的开发.那么此时,我们就可以为小组2建立一个分支,分支其实就是trunk版[主干线]的一个copy版,不过分支也是具有版本控制功能的,而且是和主干线相互独立的,当然,到最后我们可以通过[合并]功能,将分支合并到trunk上来,从而最后合并为一个项目. 下面是在eclipse下