热门标签 | 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 的合并跟踪特性来计算正确的版本范围,并且执行附加的检查来确保分支按照主干的修改进行了完整的更新。这样会确保你不会意外的撤销提交内容,这些内容是其他人在你上次同步修改后提交到主干的。

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

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


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

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

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



推荐阅读
  • 双十一在家学用 Git
    对于所有的开发者来说,掌握一门代码版本控制系统都是必须的,无论是自己做项目,团队合作,工作中的合作,都离不开版 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 先记住几个专用名词,如下:Workspace:工作区IndexStage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库#在当前目录新建一个G ... [详细]
  • 【云计算】Dockerfile、镜像、容器快速入门 ... [详细]
  • SVN 功能说明(简版)
    Subversion(SVN)是什么?SVN是一种版本管理系统,是开源软件的基石。即使在沟通充分的情况下,多人维护同一份源代码的一定也会 ... [详细]
  • 前言本篇为大家总结社区多人合作常见的场景和对应的git操作命令。本篇非新手教程,阅读本篇前需具备Git基础知识。Git入门教程请参考https://www ... [详细]
  • 本文介绍了在git中如何对指定的commit id打标签,并解决了忘记打标签的问题。通过查找历史提交的commit id,可以在任意时间点打上标签。同时,还介绍了git中的一些常用命令和操作。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • 初始化初始化本地空版本库,仓库,英文名repositorymkdirtest&&cdtestgitinit克隆项目到本地gitclone远程同 ... [详细]
  • Git GitHub多人协作
    在学校做一个小项目需要多人协作,就用到了gitHub,百度了一下多数写得乱七八糟或者支离破碎,于是总结了一下自己的步骤如下,第一次使用GitHUb,哪里不对望大神指出一.前期准备: ... [详细]
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社区 版权所有