`
zccst
  • 浏览: 3326253 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[svn] merge使用

 
阅读更多
作者:zccst

分支1:待上线(new_branch)
分支2:当前线上(online_branch)

cd new_branch

1,先将分支1与主干合并。
目的:获取最新主干。本质是将新旧主干的差异代码合并到分支1中。
svn merge https://old_trunk https://new_trunk

2,再将分支1与分支2合并。
目的:获取上一个版本上线后的更改。本质是将分支2的更改与最新主干合并到分支1中。
svn merge https://new_trunk https://online_branch


如果有冲突:
svn st | grep "C"
改。。。。。。。。。。。。。。
svn resolve --accept working /path/file
svn ci -m 'reason...'



另摘录一篇:
svn 的 merge其实很好用,当然前提是你明白了svn merge这个命令,还好,我用了大约一年明白了这个命令 -___-!!

跟大家说一下用法,比如我们要把分支merge到主干上

# svn merge --help
merge: Apply the differences between two sources to a working copy path.
usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
       2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]
       3. merge [-c M | -r N:M] SOURCE[@REV] [WCPATH]

我们以第一个为例
merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
这个help里面提示,merge需要三个参数
sourceURL1,sourceURL2的含义并不是两个分支,或者一个分支一个主干,而是同一个分支的两个状态,或者说是两个版本。对这两个版本做一个diff,然后把diff的结果,应用到最后的参数WCPATH上,WCPATH代表是一个本地已经checkout的工作区

svn merge的思想是diff and apply

比如,我开发一个项目叫做proj
目录结构是
proj/trunk
proj/branches
proj/tags

(省略了http:// 之后的,只是相对路径,但是真正使用时候不能省略)

当版本达到100的时候,我决定做一个branch进行一些其他开发
[Reversion:100]
$svn cp proj/trunk proj/branches/proj_branch_1
OK Reversion:101

然后,trunk和proj_branch_1都在开发,到了某一个版本,比如150,branch开发完成,需要merge回到trunk
此时的目录结构是
[Reversion:150]
proj/trunk
proj/branches/proj_branch_1
proj/tags

按照svn的实现,我需要知道proj_branch_1所做的所有的变化,也就是当前的状态对刚刚生成时候状态的变化。根据这个变化生成一个diff文件,在apply一个本地的工作区上。(建议是一个干净的本地trunk工作区)

那么执行
$cd proj/trunk
$svn merge proj/branches/proj_branch_1@101 proj/branches/proj_branch_1 .

其实,第一个URL(我们称之为左边),为起始状态,通过最后的@101,表示取版本101,这个101就是cp成功之后的那个版本。第二个URL(我们称之为右边),为最终状态,取最新的,
左边和右边做了一个diff,应用到当前工作区目录,也就是trunk。
此时
$svn st就可以看到变化了

这里的一个问题是如何获取这个cp之后的版本,也就是例子中的101
可以使用svn log里面的--stop-on-copy命令
$svn log --stop-on-copy proj/branches/proj_branch_1
会到cp的时候停下来,那里边标注的版本就是需要的版本

比如,这是一个真正项目的一个例子,
------------------------------------------------------------------------
r995 | yinweiming | 2007-10-24 09:07:08 +0800 (三, 24 10月 2007) | 1 line

Create a branch for proj client using
------------------------------------------------------------------------
其中的r995,995就是我需要的版本
(说明一下,commit时候写commet的好处,比如这里我就很明确的肯定这是branch的起始点)

对于svn merge的另外的用法也是类似,只要是明白了
他是根据左边,右边生成diff,然后应用到本地的一个工作区就容易理解了。

还有可以使用svn merge --dry-run来模拟假装merge一下,看一下merge会发生什么,而不是真正的做这个动作。


而对于merge的help里面的 3. merge [-c M | -r N:M] SOURCE[@REV] [WCPATH]
这个也很容易理解,就是取 SOURCE 这个东西,版本N,M之间的区别,作用在WCPATH这个本地工作区上

注意!
做branch千万别根据本地修改过的工作区做,一定基于某一个URL的版本做
我就吃过这个亏
diff的时候,diff不出来,因为基于本地工作区的,所以现在merge起来很是费劲
分享到:
评论

相关推荐

    SVNMerge源代码SVNMerge源代码

    1. **版本控制概念**:理解SVN的基本概念,如版本、分支、标签、提交、回滚等,是使用SVNMerge的前提。 2. **合并操作**:SVNMerge的核心功能是合并代码,这涉及到从不同的分支或修订版中提取代码,并将它们整合到...

    svn merge简单操作

    ### SVN Merge 操作详解 #### 一、引言 Subversion (SVN) 是一个广泛使用的版本控制系统,用于管理软件开发中的源代码变更历史。在团队合作中,合并分支(merge)是一项非常重要的操作,它使得开发人员能够将某个...

    svn 合并、冲突及常用功能详解

    文档中的`svn merge功能使用.docx`和`svn 冲突的产生与处理.docx`可能包含详细的步骤和截图,帮助读者更好地理解这些概念。`SVNConflictOverview.pdf`可能是一个更全面的冲突处理指南,涵盖了更复杂的场景和高级策略...

    关于SVN下不同分支代码的Merge的透彻理解.zip

    多分支开发,Merge是一个绕不过的话题,不管是Git还是SVN,公司用的是SVN,之前对于SVN的Merge没有很好的研究,出了些状况,这个问题不解决,顺畅地进行多分支开发就是海市蜃楼,下定决心把这块给完全搞透,在百度上...

    svn 使用(VersionControlWithSubversion)

    为了更好地管理合并过程,可以使用 `svnmerge.py` 工具。这是一个用 Python 编写的 Subversion 插件,可以自动追踪合并记录。 - 安装 `svnmerge.py` 工具: ```shell $ sudo aptitude install subversion-tools ...

    linux下svn的使用

    ### Linux 下 SVN 的使用 #### 一、简介 Subversion(简称 SVN)是一种分布式版本控制系统,主要用于软件开发项目中管理源代码的历史版本。SVN 是 CVS 的替代品,在功能性和性能方面进行了改进,使得它成为了现代...

    SVN解决冲突(合并别人的修改)

    SVN(Subversion)是一个广泛使用的版本控制系统,它帮助开发者管理和维护不同版本的文件和代码库。在多人协同开发的项目中,版本控制显得尤为重要,但同时也可能会出现代码合并冲突的情况。当两个开发者对同一文件...

    svn的使用高手

    SVN,全称为Subversion,是一款广泛应用于软件开发领域的版本控制系统。...在提供的"SVN使用"压缩包文件中,可能包含了关于如何安装、配置、使用SVN的详细教程和示例,建议仔细学习以加深对SVN的理解和应用。

    svn在linux下的使用(svn命令)

    SVN 在 Linux 下的使用(svn 命令) SVN(Subversion)是一种版本控制系统,能够帮助开发者管理代码的变更和协作。SVN 命令是 SVN 的核心组件,提供了多种功能来管理代码库。下面我们将详细介绍 SVN 在 Linux 下的...

    svn 安装使用教程

    ### SVN安装使用教程知识点梳理 #### 一、版本控制的重要性及背景 - **无版本控制的问题**: - **磁盘空间浪费**:每个开发者每天备份自己的代码,导致磁盘空间迅速消耗,且不易管理。 - **版本回溯困难**:需求...

    SVN安装包和使用

    6. **分支与合并**: SVN支持分支和合并操作,通过`svn copy`创建分支,然后在分支上开发,完成后再用`svn merge`合并回主分支。 **团队项目整合开发** 1. **版本管理**: SVN使得团队成员可以各自独立工作,通过...

    SVN常用命令(使用频率最高的)

    将一个分支的更改合并到另一个分支,使用`svn merge`: ``` svn merge ^/other_branch . ``` 以上就是SVN中最常用的命令,它们涵盖了日常开发中的基本操作。通过熟练掌握这些命令,你可以高效地管理代码版本,...

    google svn 的使用

    你可以创建分支进行独立开发,然后通过`svn merge`命令将分支上的更改合并回主分支。 5. **解决冲突**:当多人同时修改同一文件时,可能会出现冲突。SVN会在发生冲突的文件中标记出冲突部分,需要手动解决并使用`...

    SVN使用SVN使用SVN使用

    `svn branch`用于创建分支,`svn merge`用于合并分支。标签(或快照)则是某个特定时间点的项目状态,常用于发布里程碑或稳定版本。`svn copy`可以创建标签,但通常不会对其进行修改,以保持其一致性。 此外,SVN...

    使用SVN进行版本控制 使用SVN1.2

    9. **分支与合并**:使用`svn copy`创建分支,使用`svn merge`将分支合并回主干。 #### 五、SVN的优势 1. **简单易用**:SVN具有直观的命令行界面,易于学习和上手。 2. **稳定性高**:SVN经过多年的实践验证,...

    svn的使用方法简介

    删除文件或目录使用`svn delete`或`svn rm`,合并不同分支的更改使用`svn merge`,而`svn diff`则用于查看两个版本之间的差异。 在使用SVN时,可能会遇到权限验证,需要输入用户名和密码。此外,SVN还支持匿名访问...

    SVN使用教程,手把手教你如何用SVN

    ### SVN使用教程详解 #### 一、SVN简介与安装 **SVN(Subversion)**是一种开源版本控制系统,主要用于管理文件和目录的历史版本。它能够帮助开发人员追踪每一个文件和目录的变化,并允许团队成员之间共享这些变化...

Global site tag (gtag.js) - Google Analytics