一直知道SVN有个switch命令,但是对它的介绍教程却很少,大多是生硬的svn帮助文档里的文字,从而一直不怎么会用。今天看了这篇文章,突觉豁然开朗,整理下来以备查阅。

使用SVN,自然是需要与别人合作开发才能体现出作用。两个人如果都在trunk上工作,那么每次提交时都要保证代码的正确性,否则自己提交一个bug百出的版本,对方一更新就挂了,所以提交时都要很谨慎。但我觉得应该有人会像我一样有这样的强迫症,文件做点小修改就想提交到服务器上去,唯恐自己将来哪里修改失败而万劫不复。抑或为了备份考虑或者有事离开,也常常把写的不完整的程序提交上去。因此,每个人建一个branch,在自己的branch上修改,再把修改merge进trunk里是个正确选择。

之前不了解switch的用法,导致导致建的branch完全没有个branch的样子,基本和trunk平起平坐了。自己修改了内容,想要提交到trunk中,怎么做呢?恩,先把work copy提交到branch中;把trunk中现在的内容merge进work copy中(别人可能已经更新了trunk),然后再提交到branch中。然后把当前的work copy switch到 trunk(以前以为swith是这么用的!),把branch的内容merge到work copy中,然后把work copy提交到版本库中。为了把branch提交到trunk中,居然需要三次提交,这完全是在操作两个完全独立的版本库嘛,根本没有什么逻辑上的联系!

现在终于要进入主题,讲讲switch究竟是怎么用的了。

根据官方帮助文档,switch的作用是 把工作拷贝更新到别的URL。下面的例子也讲的不是很明白,导致我一直以为switch就是你可以在一个文件夹里管理两个branch,来回切换就行了,不需要新建两个文件夹,从而节省你的硬盘空间!现在通过我上面提到的那篇文章才明白,原来:一个work copy里的文件夹,可以来自不同的版本库;文件夹里的每一个文件,可以受到不同版本库的控制!

什么意思?ok,让我们来亲自实践一下。

首先建立一个测试文件夹

把trunk checkout 到本地,不妨命名为me

然后再checkout出来一遍,命名为other

相当于我们有两个本地副本在工作。

在me里,我们建两个文件,a.txt(内容Hello world!),b.txt(内容Good morning!)把me提交上去。然后为a.txt建立一个branch,就放到branch下面称为a.me.txt吧。

最终我们的版本库是这个样子:

回到本地,在me文件夹了,我们对a.txt进行switch,选择branch里的那个文件,这样,a.txt本身名字没有变,只是指向了版本库中branch的那个文件了。

ok,我们对它做点修改,

提交上去,我们更新一下other,看看a.txt,会发现内容却是保持着最早的版本,刚才我们的提交却是是修改了branch而没有改变trunk。

我们以other的身份修改b.txt

提交然后更新me,就会发现b.txt确实受到了全局的改变。

好,下面我们就要把刚才对a.txt提交到全局了。这个其实就很简单了,把a.txt switch回trunk,merge的时候选择Reintegrate a branch,来源选择branch里的那个文件就好了。最后不要忘了提交。

这时候更新一下other,就会发现 a.txt 的变化了

这差不多就把switch的用法彻底理明白了。switch是把工作空间里的一些文件、文件夹交给另一个版本库来控制,让你在一个版本库中工作的时候随时接受别人在另一个版本库对其他文件的更新。因此,你就可以完全自在的编辑自己的branch,只要update就可以获取trunk的更新(当然,trunk里别人对你switch走的文件的修改你是无法更新的,等你下次要merge是会产生conflict),因此brach和trunk的逻辑关系就是branch跟着trunk更新,trunk通过branch的merge而不断完善。

当然了,如果你对一个文件夹里德很多文件进行switch,就会很难分辨出那些文件都是受哪个版本库的控制(需要每个文件单独查询),因此一定要小心别产生混乱呦。

SVN switch 用法总结的更多相关文章

  1. SVN switch 用法详解

    一直知道SVN有个switch命令,但是对它的介绍教程却很少,大多是生硬的svn帮助文档里的文字,从而一直不怎么会用.今天看了这篇文章,突觉豁然开朗,整理下来以备查阅. 使用SVN,自然是需要与别人合 ...

  2. svn switch relocate用法

    svn info svn info 得到 Path: . Working Copy Root Path: /Users/chunhuizhao/phpworkspace/buptef_wxpay/tr ...

  3. 重新定位svn地址的方法(windows和linux),svn switch(sw)的帮助信息

    今天公司的路由器出现问题,服务器的IP地址也跟着变了,但是原来的svn已经设置好了,现在需要更换地址 查询原地址的方法: root@jack-desktop:codes# svn info 路径: . ...

  4. linux下svn的用法

    转载:http://blog.chinaunix.net/uid-22150747-id-189264.html 1.将文件checkout到本地目录 svn checkout path(path是服 ...

  5. [源码管理] ubuntu中svn简明用法:服务器搭建+客户端使用

    本文是对网络上前人的优秀文章加以实践验证后所整理(修正或补充) 第一部分:svn服务器搭建(主要是四步走) 参考:http://www.son1c.cn/show/920.html 一,安装Subve ...

  6. [开源]QuickSwitchSVNClient,快速完成SVN Switch的工具

    在实际的开发中,我们一般使用SVN工具进行源代码的管理.在实际的产品开发中,根据项目的一些定制要求,往往需要对某一些代码的修改,但是又不想影响主要的开发,这个时候需要对当前的主分支做一些分支处理(br ...

  7. QuickSwitchSVNClient,快速完成SVN Switch的工具

    [开源]QuickSwitchSVNClient,快速完成SVN Switch的工具 在实际的开发中,我们一般使用SVN工具进行源代码的管理.在实际的产品开发中,根据项目的一些定制要求,往往需要对某一 ...

  8. C# 枚举与switch用法

    using System; namespace Csharp { class Program { //枚举 public enum TimeOfDay { Morning=, Afternoon=, ...

  9. svn switch 的用法

    switch用于在同一个版本库内不同分支之间的切换relocate用于版本库访问地址变更时,重新定位版本库 比如,由于SVN服务器更换到另一台主机上,这是SVN服务器的地址改变了,那么各客户端就无法连 ...

随机推荐

  1. Git for Windows之日志查看与版本切换

    1.查看本地版本库的修改日志 (1).通过log指令查看完整日志 (2).通过 log --pretty=oneline查看简易版日志 2.版本切换 (1).切换到本地版本库最新的版本,通过reset ...

  2. numpy基本使用2

    #-*- coding:utf-8 -*- import numpy as np ''' numpy:底层由c语言实现,所以速度较快. ''' #1.numpy常用函数 l1=np.array([1, ...

  3. 计算机网络 之 TCP和UDP的端口号解析

    前言:今天了解一下tcp和udp报文的端口.发现一直以来都只是知道端口用于区分同一IP的服务器的不同服务,已经端口的大小.在查找traceroute的资料的时候,才了解到一些之前没注意到的东西. (一 ...

  4. Android_对android虚拟机的理解,包括内存管理机制垃圾回收机制。dalvik和art区别

    虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M ,谈谈加载图片的时候怎么处理大图片的,outmemoryExceptionBitmapFactory.option 垃圾回收,没有引用的对 ...

  5. maven-插件-不同的开发环境指定

    通常指定 dev环境 和 prod 环境 <profiles> <profile> <id>prod</id> <build> <re ...

  6. spring boot 与 thymeleaf (2): 常用表达式

    在asp.net mvc 中, 有一个视图解析器, 可以支持Razor语法. 使用起来, 是非常的方便, 并且, 写在前台页面的后台方法, 是可调试的. 但是在java中, 目前我还没有接触到, 像. ...

  7. mysql进行时

    1. 安装 参考 2. 远程连不上数据库 远程连接mysql时,提示“is not allowed to connect to this MySQL server” 解决(授权法): GRANT AL ...

  8. 几句话的事儿,LogBack急速使用

    1.说说logback 在java的世界里面好像从来只有log4j,因为它是在太有名气了.说实话,我也没觉得它那里不好,至少在我自己的项目里,它工作的好好的.但是主流有一种声音,在慢慢的放弃它,最始作 ...

  9. Access to XMLHttpRequest at 'XXX' from origin 'XX' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present o AJAX跨域请求解决方法

    今天出现了一个问题找了好久先看代码: 这可能是个BUG吧插入代码: dataType: 'jsonp', crossDomain: true, 最终:

  10. 杭电acm习题分类

    专注于C语言编程 C Programming Practice Problems (Programming Challenges) 杭电ACM题目分类 基础题:1000.1001.1004.1005. ...