参考视频:
SVN使用教程 - 快速上手
一、SVN简介
1、SVN的功能
(1)SVN是一种代码版本管理工具,它能记住程序员每次修改的内容,可以查看所有的历史修改记录,可以将代码恢复到任何历史版本,可以恢复已经删除的文件。
(2)SVN需要一个服务端,也就是SVN仓库(比如SVN桶,下面都以此为例),“仓库”顾名思义就是用来“放东西”,操作仓库中的文件则需要通过SVN客户端(比如TortoiseSVN,下面都以此为例)。
2、SVN相较于Git的优势
(1)SVN使用更加简单,上手更快。
(2)SVN有目录级权限控制,不够级别的成员可能无法访问部分文件,为项目安全提供了保障。
(3)SVN可以进行子目录CheckOut,减少不必要的文件检出。
3、SVN的应用场景
(1)开发人员用来做代码的版本管理。
(2)用来存储一些重要的文件,比如合同。
(3)企业内部文件共享,并且能按目录划分权限。
二、SVN基本操作
1、创建新项目
打开SVN桶中的项目列表,如下图所示,点击“创建新项目”。
如下图所示,输入项目名字和项目简介,然后点击“创建私有项目”。(如果勾选自动创建trunk、branches、tags目录结构,那么项目创建时会生成三个文件夹,这是经典的目录结构)
2、检出(checkout)
进入项目中后,如下图所示,点击“复制”。
在本地的工作区文件夹中右键选择“SVN检出”,将刚刚复制的内容粘贴到下图所示红框中的第一个输入区,第二个输入区需要填入项目在本地中的路径,填写完毕后点击“确定”。
输入注册SVN桶时的用户名和密码,完成认证。
检出完成后,工作区就为项目创建了一个文件夹,文件夹图标上的绿色勾勾代表其中的文件和SVN服务端建立关系。
3、新增(add)和提交(commit)
将需要新增的文件添加进项目文件夹中,然后在本地的项目文件夹中右键选择“SVN提交”,如下图所示,选择需要新增的文件,可以输入提交描述,然后点击“确定”即可。
新增成功的结果如下图所示,新增成功后,本地文件(或文件夹)的图标上会有一个绿色勾勾,代表文件(或文件夹)和SVN服务端建立关系。
4、更新(update)
在本地的项目文件夹中右键选择“SVN更新”,即可将SVN仓库中的文件更新至本地。
5、修改后提交(commit)
修改文件,然后在本地的项目文件夹中右键选择“SVN提交”,在弹出的窗口中双击修改过的文件,可以查看修改前后的对比,没有问题的话点击“确定”即可提交。
提交完成后,可以在SVN仓库中看到修改记录。另外,在本地的项目文件夹中右键选择“TortoiseSVN”→“显示日志”,也可以查看提交记录。
三、撤销和恢复
1、撤销本地的修改
在本地修改过的文件(还未提交),如果想要恢复至上一版本(上一版本指的是最后提交至云端的版本),可以右键目标文件选择“TortoiseSVN”→“SVN还原”,或者右键空白区域选择“SVN提交”,右键欲恢复的文件,选择“SVN还原”即可。
2、撤销已提交内容
如果不小心将错误的修改版本提交上去,可以在本地的项目文件夹中右键选择“TortoiseSVN”→“显示日志”,右键选择错误的提交记录,选择“复原此版本作出的修改”即可将错误的版本恢复至上一版本。值得注意的是,这里的撤销仅恢复了本地文件的修改,在这之后要将文件重新提交,云端上的错误版本才会被“覆盖”。
3、恢复到指定版本
如果想将本地的文件恢复到指定版本(不局限于上一个版本),可以在本地的项目文件夹中右键选择“TortoiseSVN”→“显示日志”,右键选择目标版本的提交记录,选择“复原到此版本”即可将本地的文件恢复到指定版本。
四、忽略
1、忽略文件夹
有时并不是需要提交项目文件夹中的所有文件夹,这时可对不需要提交的文件夹添加忽略,具体方法为右键需要忽略的文件夹,选择“TortoiseSVN”→“去除版本控制并增加到忽略列表”,这样,下次提交时就不会将该文件夹上传至SVN仓库(如果提示目录过期,那么“SVN更新”以后再提交即可),同时SVN仓库中相应的文件夹也会被移除。
如果想移除文件夹忽略,可以右键项目文件夹空白区域,选择“TortoiseSVN”→“属性”,双击被忽略的文件夹值,清空其取值后点击“确定”,然后将项目再次提交,即可将文件夹忽略撤销。
2、忽略文件
对于doc文件夹中新添加的一个text文本文件,如果想将其忽略,那么提交时右键该文件,选择“添加到忽略列表”,或者直接右键该文件,选择“TortoiseSVN”→“增加到忽略列表”即可,对于后者,可应用在已提交过的文件上,下次提交时就不会将该文件上传至SVN仓库,同时SVN仓库中相应的文件也会被移除。
如果想移除文件的忽略,可以右键该文件,选择“TortoiseSVN”→“加入”,或者选择“TortoiseSVN”→“从忽略列表删除”即可。
五、解决冲突
1、可能发生冲突的情况
(1)多个用户修改了同一个文件的同一行(如果是不同行,一般都能够自动合并)。
(2)多个用户修改了无法进行合并的二进制文件。
2、减少冲突的方法
(1)经常使用“SVN更新”同步其他人的修改版本再做修改(需要说明的是,更新并不等于备份/复制/拷贝,可认为是将其他人在文件上做的修改视作补丁打到自己本地的文件上,自己对本地文件的修改也可视作补丁,只要几块补丁没有覆盖同一行就能自动合并)。
(2)对于二进制文件,不要多个人同时操作。
3、解决冲突的办法
如果确实产生了冲突,那么在更新文件时将会报错,这时可以右键冲突信息,选择保留对方的修改(使用“他们的”文本块解决冲突)或者保留自己的修改(使用“我的”解决有冲突的文件),亦或者是选择“编辑冲突”进行手动合并(红色区域表示有冲突需要解决)。
对于图片这种二进制文件,如果产生冲突,可以在更新文件报错时右键冲突信息,选择“编辑冲突”,从冲突版本(本地版本、上一个版本、其他人修改的版本)中选择其中一个版本。
六、分支
1、需要开分支的情况
(1)隔离线上版本和开发版本。
(2)大功能开发,文件过多可能会影响其他人,需要自己独立开个分支去开发,开发完成后再合并回来。
2、分支操作
(1)SVN经典目录结构为trunk(主干)、branches(分支)、tags(标签),这三个目录可自主创建,也可在SVN仓库中新建项目时自动创建。
(2)从主干开分支:右键主干文件夹,选择“TortoiseSVN”→“分支/标记”,修改路径为分支文件夹,在其下新建一个由分支命名的文件夹(比如线上版本1.0),分支中的文件一般选用最新版本,点击“确定”后更新一下即可。
(3)分支单独检出:右键小分支文件夹,选择“属性”,获取其URL,然后在项目文件夹的上一级(也就是存放项目文件夹的工作区文件夹)右键选择“SVN检出”,将刚刚获取的URL填入版本库URL中,检出目录名可以修改一下,然后完成检出即可,这样,即使删掉本地的项目文件夹,仍可以在检出的子目录文件夹中做修改,不会影响项目的其它子目录。
(4)分支修改后合并到主干:在分支文件夹中对文件进行修改后,将分支提交,然而这样还不能让主干文件夹中的相应文件同步发生改变,这时可以右键分支文件夹,选择“TortoiseSVN”→“显示日志”,右键需要合并的修改记录,选择“合并版本到”,再选择主干文件夹,这样,本地的主干文件夹中的相应文件就会同步分支中的修改,接着再将主干提交即可。
(5)分支切换:假设当前有两个分支(第二个分支的含义为线上版本2.0),右键本地的分支(线上1.0版本)文件夹,选择“TortoiseSVN”→“切换”,路径选择2.0版本的分支文件夹,然后点击“确定”即可,不过本地的文件夹名称不会改变,如果需要则自行修改即可。
七、暂存
1、需要代码暂存的情况
(1)代码改了很多,突然需要紧急修复一个bug,但是代码还没写完,不能提交。
(2)代码重构了很多,突然需要发布新版本,但是代码还跑不起来,不能提交。
2、代码暂存
修改了项目文件夹中的一些代码文件后,右键本地文件夹,选择“TortoiseSVN”→“贮藏...(Shelve...)”,然后选择需要暂存的文件,之后对本地文件的修改是否保留做选择。
3、取出代码暂存
右键本地文件夹,选择“TortoiseSVN”→“取消贮藏...(UnShelve...)”,根据名称选择对应的暂存,对于同一个名称的暂存,它按照时间排序会有不同的版本,根据需要选择对应的版本,然后单击“应用(Apply)”,即可将本地的文件同步为暂存版本。
八、复杂代码合并
1、需要代码合并的情况
(1)主干开发了新功能,改了很多代码。
(2)分支是线上版本,修复了很多bug。
(3)两个分支的代码时间久了差异很大,无法直接分支合并或者指定提交记录合并代码。
2、使用Beyond Compare工具合并代码
打开两个目录,这里演示的是一个版本分支文件夹和主干文件夹。
选择目录下的文件夹,右键选择“比较内容”,点击“开始”,Beyond Compare会将有差异的文件全部用红色不等号标出(点击上方工具箱的“全部”可显示全部无差异文件,点击上方工具箱的“差别”可仅显示有差异文件)。
双击文件即可进行处理,如下图所示,处理完成后按下快捷键Ctrl+S保存即可。
两边目录下的文件数目不一定完全对应,对于一边有而一边没有的文件,可以选择删除己侧的文件,或者将己侧的文件复制到对方。
分支的修改合并到主干上后,将主干提交即可。