SVN switch 用法总结
一直知道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 用法总结的更多相关文章
- SVN switch 用法详解
一直知道SVN有个switch命令,但是对它的介绍教程却很少,大多是生硬的svn帮助文档里的文字,从而一直不怎么会用.今天看了这篇文章,突觉豁然开朗,整理下来以备查阅. 使用SVN,自然是需要与别人合 ...
- svn switch relocate用法
svn info svn info 得到 Path: . Working Copy Root Path: /Users/chunhuizhao/phpworkspace/buptef_wxpay/tr ...
- 重新定位svn地址的方法(windows和linux),svn switch(sw)的帮助信息
今天公司的路由器出现问题,服务器的IP地址也跟着变了,但是原来的svn已经设置好了,现在需要更换地址 查询原地址的方法: root@jack-desktop:codes# svn info 路径: . ...
- linux下svn的用法
转载:http://blog.chinaunix.net/uid-22150747-id-189264.html 1.将文件checkout到本地目录 svn checkout path(path是服 ...
- [源码管理] ubuntu中svn简明用法:服务器搭建+客户端使用
本文是对网络上前人的优秀文章加以实践验证后所整理(修正或补充) 第一部分:svn服务器搭建(主要是四步走) 参考:http://www.son1c.cn/show/920.html 一,安装Subve ...
- [开源]QuickSwitchSVNClient,快速完成SVN Switch的工具
在实际的开发中,我们一般使用SVN工具进行源代码的管理.在实际的产品开发中,根据项目的一些定制要求,往往需要对某一些代码的修改,但是又不想影响主要的开发,这个时候需要对当前的主分支做一些分支处理(br ...
- QuickSwitchSVNClient,快速完成SVN Switch的工具
[开源]QuickSwitchSVNClient,快速完成SVN Switch的工具 在实际的开发中,我们一般使用SVN工具进行源代码的管理.在实际的产品开发中,根据项目的一些定制要求,往往需要对某一 ...
- C# 枚举与switch用法
using System; namespace Csharp { class Program { //枚举 public enum TimeOfDay { Morning=, Afternoon=, ...
- svn switch 的用法
switch用于在同一个版本库内不同分支之间的切换relocate用于版本库访问地址变更时,重新定位版本库 比如,由于SVN服务器更换到另一台主机上,这是SVN服务器的地址改变了,那么各客户端就无法连 ...
随机推荐
- 五、CLR加载程序集代码时,JIT编译器对性能的产生的影响
1.CLR首次加载代码造成的性能损失 四.CLR执行程序集中代码介绍了CLR在首次执行一个类的时,会初始化一个内部结构,然后当目标方法被首次调用时,JITComplier函数(JIT编译器)会验证IL ...
- C++程序员面试题目总结(涉及C++基础、多线程多进程、网络编程、数据结构与算法)
说明:C++程序员面试题目总结(涉及C++基础知识.多线程多进程.TCP/IP网络编程.Linux操作.数据结构与算法) 内容来自作者看过的帖子或者看过的文章,个人整理自互联网,如有侵权,请联系作者 ...
- NIO基础之同步、异步、阻塞、非阻塞
这里区分几个概念,也是常见但是容易混淆的概念,就是标题中的同步.异步.阻塞.非阻塞. 一.同步与异步 同步与异步,关心的是消息通信的机制.也就是调用者和被调用者之间,消息是如何进行通知的.如果是调用者 ...
- Windows 8.1 GetVersionEx返回6.2.9200 的问题!
http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074.aspx http://tunps.com/getversionex- ...
- AutowireCapableBeanFactory源码详解
一.概述 对于想要拥有自动装配能力,并且想要把这种能力暴露给外部应用BeanFactory类需要实现此接口. 正常情况下不要使用此接口,应该更倾向于使用BeanFactory或者ListableBea ...
- HttpServletRequest.getInputStream() 只能读取一次
问题:在使用HTTP协议实现应用间接口通信时,服务端读取客户端请求过来的数据,会用到request.getInputStream(),第一次读取的时候可以读取到数据,但是接下来的读取操作都读取不到数据 ...
- 【IT笔试面试题整理】位操作
如何准备: Bit manipulation can be a scary thing to many candidates, but it doesn't need to be! If you're ...
- Oracle数据库操作---基础使用(二)
此篇承接上一篇的基本原理,继续展开学习,本篇主要面向数据的使用和管理,也就是开发者常用的基础语句,开始喽…… >>>对整表的操作 >创建表 关键字 Create creat ...
- 逆向工程生成的mybatis中mapper文件。mapper接口,实例化成对象
逆向工程生成的mybatis中mapper文件中,*mapper文件只是接口,而不是类文件.但是却可以通过spring的容器获得实例. 例如: //1.获得mapper代理对象,从spring容器获得 ...
- Java下载execl表格
Java用POI往execl表格中写数据,并下载下来有两种方式 1.用poil的API创建表格,并设计好表格格式,然后往里面写数据 /** * execl导出 创建表格式,并写入数据 * @param ...