经典剖析SVN分支与合并

开发 项目管理
在学习SVN的过程中,你可能会遇到SVN分支与合并问题,本文简单介绍一下分支和SVNmerge有很多不同的用法最常见的一些用法,欢迎大家一起来学习。

本节主要向大家描述一下SVN分支与合并,分支和SVNmerge有很多不同的用法,这个小节描述了最常见的用法,希望通过本节的学习,大家对SVN分支与合并有深刻的理解。下面是SVN分支与合并

合并分支到另一分支

为了完成这个例子,我们将时间往前推进,假定已经过了几天,在主干和你的分支上都有许多更改,假定你完成了分支上的工作,已经完成了特性或bug修正,你想合并所有分支的修改到主干上,让别人也可以使用。
SVN分支与合并中在这种场景下如何使用svnmerge?记住这个命令比较两个目录树,然后应用比较结果到工作拷贝,所以要接受这种变化,你需要主干的工作拷贝,我们假设你有一个最初的主干工作拷贝(完全更新),或者是你最近取出了/calc/trunk的一个干净的工作拷贝。

但是要哪两个树进行比较呢?乍一看,回答很明确,只要比较***的主干与分支。但是你要意识到—这个想法是错误的,伤害了许多新用户!因为svnmerge的操作很像svndiff,比较***的主干和分支树不仅仅会描述你在分支上所作的修改,这样的比较会展示太多的不同,不仅包括分支上的增加,也包括了主干上的删除操作,而这些删除根本就没有在分支上发生过。

为了表示你的分支上的修改,你只需要比较分支的初始状态与最终状态,在你的分支上使用svnlog命令,你可以看到你的分支在341版本建立,你的分支最终的状态用HEAD版本表示,这意味着你希望能够比较版本341和HEAD的分支目录,然后应用这些分支的修改到主干目录的工作拷贝。

查找分支产生的版本(分支的“基准”)的***方法是在svnlog中使用--stop-on-copy选项,log子命令通常会显示所有关于分支的变化,包括创建分支的过程,就好像你在主干上一样,--stop-on-copy会在svnlog检测到目标拷贝或者改名时中止日志输出。

所以,在我们的例子里,$svnlog-v--stop-on-copy\
http://svn.example.com/repos/calc/branches/my-calc-branch

------------------------------------------------------------------------
r341|user|2002-11-0315:27:56-0600(Thu,07Nov2002)|2lines
Changedpaths:
A/calc/branches/my-calc-branch(from/calc/trunk:340)

$
正如所料,***打印出的版本正是由my-calc-branch拷贝生成的版本。

如下是最终的合并过程,然后:

  1. $cdcalc/trunk  
  2. $svnupdate  
  3. Atrevision405.  
  4.  
  5. $svnmerge-r341:405http://svn.example.com/repos/calc/branches/my-calc-branch  
  6. Uinteger.c  
  7. Ubutton.c  
  8. UMakefile  
  9.  
  10. $svnstatus  
  11. Minteger.c  
  12. Mbutton.c  
  13. MMakefile  
  14.  
  15. #...examinethediffs,compile,test,etc...  
  16.  
  17. $svncommit-m"Mergedmy-calc-branchchangesr341:405intothetrunk."  
  18. Sendinginteger.c  
  19. Sendingbutton.c  
  20. SendingMakefile  
  21. Transmittingfiledata...  
  22. Committedrevision406.  
  23.  

 

再次说明,日志信息中详细描述了合并到主干的的修改范围,记住一定要这么做,这是你以后需要的重要信息。

举个例子,你希望在分支上继续工作一周,来进一步加强你的修正,这时版本库的HEAD版本是480,你准备好了另一次合并,但是我们在“合并的***实践”一节提到过,你不想合并已经合并的内容,你只想合并新的东西,技巧就是指出什么是“新”的。

***步是在主干上运行svnlog察看***一次与SVN分支与合并的日志信息:

$cdcalc/trunk
$svnlog

------------------------------------------------------------------------
r406|user|2004-02-0811:17:26-0600(Sun,08Feb2004)|1line

Mergedmy-calc-branchchangesr341:405intothetrunk.
------------------------------------------------------------------------

阿哈!因为分支上341到405之间的所有修改已经在版本406合并了,现在你只需要在SVN分支与合并中合并分支在此之后的修改—通过比较406和HEAD。

 

  1. $cdcalc/trunk  
  2. $svnupdate  
  3. Atrevision480.  
  4.  
  5. #WenoticethatHEADiscurrently480,soweuseittodothemerge:  
  6.  
  7. $svnmerge-r406:480http://svn.example.com/repos/calc/branches/my-calc-branch  
  8. Uinteger.c  
  9. Ubutton.c  
  10. UMakefile  
  11.  
  12. $svncommit-m"Mergedmy-calc-branchchangesr406:480intothetrunk."  
  13. Sendinginteger.c  
  14. Sendingbutton.c  
  15. SendingMakefile  
  16. Transmittingfiledata...  
  17. Committedrevision481.  

现在主干有了分支上第二波修改的完全结果,此刻,你可以删除你的分支(我们会在以后讨论),或是继续在你分支上工作,重复这个步骤。请期待下节SVN分支与合并介绍。

【编辑推荐】

  1. SVN分支与合并之专家课堂
  2. 深入讲解SVN分支与合并的关系
  3. SVN分支与合并实例剖析
  4. SVN分支与合并学习大本营
  5. 两个简单操作介绍TortoiseSVN项目

 

 

 

 

 

责任编辑:佚名 来源: it168.com
相关推荐

2010-05-20 15:32:38

SVN分支与合并

2010-05-28 17:00:24

SVN分支与合并

2010-05-20 15:50:05

SVN分支

2010-05-20 15:12:02

SVN分支与合并

2010-05-28 17:15:17

SVN分支与合并

2010-06-01 11:13:40

Svn分支合并

2010-06-01 19:47:29

SVN分支与合并

2010-06-01 12:36:04

SVN分支与合并

2010-06-01 11:22:30

SVN合并跟踪

2010-05-28 15:47:29

SVN分支

2010-05-28 15:57:20

SVN分支

2010-05-20 16:01:36

SVN分支维护

2010-05-27 10:23:01

SVN文档

2010-05-27 12:58:07

SVN升级

2010-06-01 10:37:15

SVN合并

2010-02-22 16:09:33

WCF宿主

2010-05-28 17:30:58

SVN分支

2011-03-30 10:50:55

GitLinux 版本控制

2010-06-01 12:49:04

SVN分支模式

2010-05-26 19:36:34

SVN目录结构
点赞
收藏

51CTO技术栈公众号