小结:
1.主干在建立分支之后与分支同时修改了某个类文件.合并的步骤是:主干->分支->主干,有人可能认为将主干->分支就可以将分支做为主干. 一般上线的都是主干.而不会是分支, 从分支->主干如果在主干->分支做完之后,merge应该没什么障碍了.
2.分支的日志包含了主干在拆成分支之前的日志, 可以也可以通过命令显示仅在拆出之后,分支的日志部分.
3.在冲突的时候,diff版本用来显示,直接编辑冲突文件消除冲突即可.
4.版本号是针对整个工程累加计算的.工程包括trunk,branch,tag.
-------------------------------------------------------------------------------
转自http://blog.csdn.net/jixiuffff/archive/2010/05/13/5586858.aspx
假如主干是这样的
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--------->
来源:https://www.cnblogs.com/highriver/archive/2011/05/30/2063281.html