SVN基础操作面面观
目录
- 一、为什么要用svn
- 二、svn功能介绍
- 三、svn文件状态说明
- 四、windows svn安装
- 五、Windows svn操作使用
- 六、冲突与解决
- 七、冲突解决实例
- 八、Commit Monitor
- 九、svn版本目录管理(branch/tag)
- 十、Linux环境下svn安装与使用
一、为什么要用svn
有很多原因,说几个实际点:
写文档、码代码很辛苦,备份很必要 利于版本管控,管理层可以及时了解团队中小伙伴的进度 团队协作,提高团队工作效率。
工欲善其事必先利其器。
二、svn功能介绍
Subversion 是一个开源的版本控制系統。
有一个简单但不十分精确比喻:
svn = 版本控制 + 备份服务器
简单的说,您可以把svn当成您的备份服务器,更好的是,他可以帮您记住每次上传到这个服务器的档案内容。并且自动的赋予每次的变更一个版本。
svn分为服务器端和客户端,通常情况大多人都在客户端操作。
三、svn文件状态说明
绿色的勾, 表示subversion状态正常。不论是刚检出或是正常更新;
红色感叹号,表示有文件被修改,且没有提交到版本库中;
在提交过程中出现了冲突,图标显示黄色感叹号;
加锁图标, 表示有一个文件加了锁,同时也在提醒:如果不使用改文件的话,要记得释放锁,否则其他人将无法对该文件进行修改;
红色的叉, 表示当前文件夹下的某些文件或文件夹被计划从版本控制中删除,或是该文件夹下某个受控的文件丢失了;
蓝色加号, 表示我们有一个文件或是目录已经被加入版本控制中。
四、windows svn安装
下载Windows 端程序:http://tortoisesvn.net/downloads
执行下载回来的Tortoisesvn 安装程序,正确安装后,不知道现在的版本和windows是否要求重启电脑。这里忽略安装过程,有问题的话,可以找你身边的开发帅哥们。
Windows安装及汉化
安装及汉化参考1:http://jingyan.baidu.com/article/0aa223758081b788cc0d64e7.html
安装及汉化参考2:http://jingyan.baidu.com/article/48b558e32b9ab27f39c09a50.html
五、Windows svn操作使用
1、svn简单操作示意图
常用功能:
checkout检出、add添加、commit提交、update更新、删除、重命名、移动、show log日志
更多功能:
revert还原、get lock上锁、release lock释放锁、clean up清除、branch分支、tag标签、switch切换分支、merge合并、resolve解决冲突、relocate重新定位、create patch、apply patch
2、svn仓库资源路径
假设有个项目叫chineseapple,首先svn管理员会在svn服务端创建一个svn项目,并提供一个项目svn路径。 管理员在svn管理后台创建了一个svn项目目录,这个目录有svn仓库的地址(至于权限的问题,管理员关心,使用者不用关心)
3、客户端本地检出:
本地创建一个chineseapple的目录
右键找到svn checkout(检出)
检出时,如果是私有不公开的svn仓库,需要输入svn帐户和密码。
完成检出checkout
svn会在您的chinesapple工作目录下,以及其子目录下建立这个.svn的子目录。您不应该进去这个目录,尤其不应该更动这个目录下面的任何内容。否则会很可能会造成svn无法正常运作。
4、添加标记
尝试在工作目录下创建一个starry的文件,然后加了些文字
点击添加add操作,弹出:
提交commit文档,提交时备注简要信息,可以供自己或他人查找版本时,了解该版本更新了什么内容
一般在需要和svn服务器交互时,比如提交,会要求再次输入帐号密码,如果觉得电脑环境安全靠谱,可以记住授权
这个时候就可以在svn服务器上看到starry这个文件了(我们不关心,只要知道)
5、本地更新update
为什么会用到更新?
团队协作,提交到svn的文档,团队里有权限的成员都可以更新到本地并做修改再提交。
比如说有个新人叫小明,小明也在自己电脑checkout检出svn目录,小明就看到了starry的文件,小明的英语可能比较好,就随手翻译了里面的内容并加进点英文介绍。
小明为了让所其他人看得到英文版的介绍,他准备提交文件starry到svn,当然小明还有个未完成的文件xiaoming,他暂时不想提交,小明做了以下操作:
这个时候要看小明的英文介绍,需要去更新我们自己的工作副本目录: 更新工作目录svn update:
更新后可以看到更新了starry文件 版本3:
为了大概知道更新了什么,可以用右下角的show log查看日志:
然后你可能决定夸下小明,就在starry尾部追加了夸奖,并提交commit:
当然小明明天早上起来更新工作目录的时候,会发现你夸奖了他。
后面再说为什么更新很重要。
6、删除
你可以用svn上的删除操作
也可以直接手动删除;
两种删除方式,最后都要提交commit告诉svn服务器这个版本删除某个文件;
7、重命名&移动
重命名和移动,在计算机里被定义为复制再删除。等价于新建文档,再删除旧文档。
根据之前添加、删除的操作,我们可以用以下操作:
正常重命名、复制或移动文档后,在svn工作目录下,添加add,再提交commit即可。
8、查看日志show log
show log 可以查看svn仓库的所有提交等操作日志,可以查看谁在什么时间对什么文档做了什么操作。
在查看日志界面上有很多功能,比较文档、创建分支标签、还原版本、合并版本等
这里先介绍文档比较,后面陆续介绍其他功能; 双击上图中红框中的路径文本链接,svn会对当前版本和上一个版本进行比较。
9、本地还原revert
默认还原到最新版本,将最新版本中被修改、被删除的文档都还原到最新版本状态。
当然还可以还原回滚到指定版本:
10、锁lock
上锁get lock: 比如你可能在改一个很重要的文件,为了防止出现别人也在改的情况,你就提前锁住这个文件:
可能小明刚好也要改这个文件,这时小明修改了文件但是提交不了;
直到你亲自释放锁release lock:
释放锁后,小明就可以update更新工作目录,没有出现冲突的情况下,就可以再次提交了
11、清除 clean up
svn 本地更新时,由于一些操作中断更新,如磁盘空间不够,用户取消,可能会造成本地文件被锁定的情况。
一般出现这种情况的解决方法:使用svn clean up来清除锁定。
当然像之前对文件上锁,如果你忘了释放锁,就会导致其他协作伙伴不能提交,也可以直接使用clean up,或者手动到.svn目录中删除.lock的文件。
12、分支/标记(branch/tag)
svn中分支和标记操作一样,只是你心里要给当前这个copy叫分支和标记的区别。
说到分支,一般把第一份文档代码放入trunk的目录,表示主干分支,长期正常开发使用。
而在trunk的平行目录里创建branchs和tags目录,tags目录用于存放每一次可以发布的版本(from trunk), branchs目录用于存放每一次版本release后做bug修复分支版本(from tags);
创建branch/tag:
切换到branch/tag:
13、合并merge
进入合并目的目录,比如要合并到trunk,进入trunk目录,点击merge操作;
选择适合合并到trunk的类型,有些版本有三个类型,有的两个类型
选择合并来源
选择来源分支,bug_fix修复分支
合并一般不出现冲突的情况下会自动合并
合并结果,不出现冲突(合并的时候会提示是否冲突)情况下,及时提交commit目的目录
14、relocate
假设哪天,某个项目的svn路径更改了,那么不需要重新checkout,只需要relocate 路径即可。
15、patch 补丁
没使用过,留给勤奋的人去研究。
六、冲突与解决
冲突一般出现以下两种场景:
本地更新及提交冲突
版本合并冲突;
本地更新及提交冲突
团队协同工作时,当多位团队成员同时修改同一个文件,造成本地文件与svn系统中的文件版本不一致,而导致文件无法更新或提交的情况。
产生原因:
当团队协同工作的时候,多位团队成员同时操作一个文件。团队成员A操作完成后,将该文件提交到svn上,此时,其他成员的本地文件与svn上的文件版本不一致。
当团队成员B操作完成并对文件进行提交操作时,就会产生冲突。
本地版本合并冲突
在多分支管理下,经常需要把分支合并到主干上,当分支和主干修改了同一个文件,则在合并时,可能出现无法自动完成合并的情况。
产生原因:
项目版本管理需要,无法避免。
解决冲突
不论是否遇到冲突,应该养成一个好的习惯:提交前先更新。可以最大限度的避免不必要的冲突。
更新时文件还是冲突了或者版本合并冲突,都可以根据svn工具提供的冲突文件,选择需要的版本文件或模块或行,甚至手动修改行。
七、冲突解决实例
背景:其他成员已经更新了starry文件,但小明还不知道,又在starry改了点东西
在未更新的情况下,小明主动提交了starry文件
提交的时候,冲突了
那小明就先更新下,再提交,真不巧,就碰上了本地更新冲突
双击红色冲突文件,开始解决本地冲突,:
解决同一行冲突
冲突解决结果
标记冲突解决
解决完冲突,再提交
【本地版本合并代码,处理冲突方式与解决本地更新冲突类似】
八、Commit Monitor
检测及提示团队其他成员svn提交操作。对于管理层、测试或经常与小伙伴协作同一个文件的童鞋很有用处。
九、svn版本目录管理(branch/tag)
十、Linux环境下svn安装与使用
环境:centos6.4
yum -y install subversion
环境:ubuntu 12.04
sudo apt-get install subversion
当然也可以自己编译比较新的svn版本。
svn常用命令:
条件允许的话,建议使用git管理。 @tsingchan