热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

svn版本控制中有关merge的几个问题

   在用svn的时候,我们通常会使用下面的目录结构   projectname      -head      -

      在用svn的时候,我们通常会使用下面的目录结构

      projectname

            -head

            -branches

            -tags

       通常的做法是我们在需要一个新的分支的时候,从head创建一个分支到branches下面,比如叫release1. 开发完成后,上production结束,将head打一个tag,然后将release1的代码merge回head.

       但是在实际开发中我经常发现有一些人从head拿出代码后直接开发,开发完了后断开svn,然后重新提交到branches下面。这样子就有一个问题,分支不是head创建出来的,当我们想把这个分支的代码merge回head的时候,就不能用 "Reintegrate a branch",如果你用这个会报错,提示说这两个分支没有父子关系,只能使用第一种方式"Merge a range of revisions", 其实使用这种方式理论上来说应该也没有问题,但是我在实际使用的时候发现了一个很奇怪的现象:

       当你从head checkout出来,然后改了很多类,然后提交到branches下面生成一个新的分支。这时候你用head去merge这个分支的代码会发现一个都merge不到,但是你用compare去比对又发现很多不一样的类,但是merge死活提示没有更新。然后你在这个新的分支下再修改一个类,再提交,你会发现head能merge到这个新提交了类。我找了很多资料,也去看了svn的日志和文件的版本,没有找到背后的根本原因是什么,可能还是我对svn的原理不熟悉,我想以后多用命令行的方式去执行应该能有更多的发现,现在用eclipse插件,很多后面的东西是发现不到的。

      所以还是建议开发人员一定要按规范的方式去使用svn,不要因为有时候会有一点麻烦,而把整个svn的版本搞乱了。


      这里有一篇文章是讲分支合并的几种方法 http://www.doc88.com/p-876813951357.html

      我觉得第一种就是分支与分支的合并,或者是分支合并主干的内容

      第二种主要是主干合并分支的内容,这个可以从它的描述和事例图看得出来(描述和事例图是在eclipse的svn插件上)

      另外还有一篇是腾迅的配置管理文档,svn的版本有点老了,不过写得还比较详细

      http://wenku.baidu.com/link?url=jP9dk2MpvCIUbLikzzC-2nSCdatAaq4VKO2VAidfWtVHV45HdZBJgikhQb15uXtcCbfeKvoBVSErl_ayaoysiUaAl0K1AYKqVOqO3Az4Ed7


      关于复兴分支,我还发现另一段描述

这个用例覆盖了这种情况,当你象《Subversion手册》里讨论的那样,创建了一个新特性分支。所有主干的修改都要每周一次合并到新特性分支,等新特性完成后,你想将它合并到主干。因为你已经保持了新特性分支和主干同步,所以除了你在分支做的修改,其它部分在分支和最新版本应该是相同的。

这是下面讨论的树合并的特殊情况,它只需要你(通常情况下)想要合并的开发分支的 URL。它使用 Subversion 的合并跟踪特性来计算正确的版本范围,并且执行附加的检查来确保分支按照主干的修改进行了完整的更新。这样会确保你不会意外的撤销提交内容,这些内容是其他人在你上次同步修改后提交到主干的。

合并之后,分支的所有开发被完整的合并到主开发版本。现在的分支已经是多余的,可以删除。

一旦你执行了复兴合并,你就不应该继续使用它来进行开发。这样做的原因是,如果过后你试图再次对现有的分支与主干进行同步,合并跟踪将会把你的复兴合并视为未合并到分支的主干修改,并且试图将分支到主干的合并再合并回分支!解决方案很简单,从主干创建一个新的分支来进行下一阶段的开发。


当您在一个特性分支上开发一项新特性并完成时,为其重新整合至主干制定一个策略是一个好主意。如果同一时间 主干 上有其他工作也在继续,您可能会发现随着时间推移,差异会变得更显著,复兴合并将成为一场噩梦。

如果新特性较为简单并且开发时间较短,那么您可以采取一种简单的方法,就是将分支完全独立,直到完成该特性,然后将分支更改合并回主干。在合并向导中,选择简单的 合并一个版本范围,该版本范围即是分支的版本跨度。

如果该特性需要花费更长的时间,就要考虑到 主干 中的变化,那么你就需要保持分支同步。这仅仅意味着定期地将主干的修改合并到分支,使分支包含所有主干的修改并 加上 新特性。同步过程使用 合并一个版本范围 。当完成新特性时,那么你可以使用 复兴分支 或 合并两个不同的树 将其合并回 主干



推荐阅读
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 双十一在家学用 Git
    对于所有的开发者来说,掌握一门代码版本控制系统都是必须的,无论是自己做项目,团队合作,工作中的合作,都离不开版 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • SQL Server中TempDB管理(version store的逻辑 ... [详细]
  • IamsettingupApacheserverwithTortoiseSVNforalocalsourcecoderepository.Ihaveobservedt ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
author-avatar
亲爱的jackvan叔叔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有