TortoiseSVN
0 TortoiseSVN图标介绍
Subversion 简称SVN
0.1 SVN软件版本管理原理
当我们完成一些功能的开发后,可以将改动提交到中心仓库,这时候中心仓库会产生一个只记录改动的新版本。这些版本会按照严格的时间线来存储。借助仓库这种存储结构,我们可以很容易回退到历史版本,以及查看版本之间的差异。
0.2 TortoiseSVN图标介绍
属性 | 描述 |
---|---|
绿√ | 新检出的工作复本使用绿色的对勾重载,表示Subversion状态正常。 |
红色感叹号 | 状态就变成了已修改,而图标重载已变成了红色感叹号。需要提交。 |
黄色感叹号 | 提交的过程中出现了冲突 |
加号 | 有一个文件或者目录已经被计划加入到版本控制中。 |
1 svn基础操作
1.1 增加(Add)
新建一个b.txt文件
- 右键SVN菜单执行“Add“操作提交到”变更列表中”,然后右键SVN菜单执行”SVN Commit”提交到版本库中。
- 右键svn菜单执行”SVN Commit”操作。(不提交到变更列表中,而是直接commit配置库中)
1.2 删除(Delete)
- 选择被删除文件,右键svn菜单执行”delete”操作,然后选择被删除文件的父目录,右键svn菜单执行”SVN Commit”.
1.3 改名(Rename)
- 选中需要重命名的文件或文件夹,然后右键“TortoiseSVN->Rename“,在弹出的对话框中输入新名称,点击”ok”按钮,并将修改文件名后的文件或文件夹通过 “SVN Commit”提交到SVN服务器上。
1.4 SVN还原(SVN Revert)
- 右击想要回退的文件或者文件夹,在TortoiseSVN弹出菜单中选择”Update to reversion…” 然后会弹出一个窗口
比如说我们要回退到第10个版本只需要在Revision中填写相应的版本号,然后点击ok即可。
1.5 检查更新(Check for modifications)
- 此功能可以显示你所做的修改有哪些还没有提交的,此功能不光能看到对文件的修改变化,所有的变化都能看到,包括增加文件或者目录,删除文件或者目录,移动文件或者目录等,如果你点击了检查版本库,那你还可以看到版本库里的改动,既别人提交了哪些文件的改动,你还没更新到本地,如下:
1.6 SVN更新(SVN Update)
更新本地代码与SVN服务器上最新的版本一致
1.7 如何解决冲突文件
为什么会产生冲突代码呢?原因很简单就是因为不同的人,同时修改了同一个文件的同一个地方,这时候,他提交了,我没有提交,我就提交不了,这个时候我们要进行先更新,然后在进行提交即可,那如果产生冲突,会生成如上3个文件。
每个冲突的文件Subversion在你的目录下放置了三个文件:如下:
1. txt.mine 是冲突前自己的文件。可以看下内容如下:
aaaasdf11222333 dderderder
2. 1.txt.r4 是冲突前本地的版本文件
内容如下:aaaasdf11222333
3. 1.txt.r5 是别人赶在你之前提交的版本
内容如下: b
有上面3个文件存在肯定提交不了.
<<<<<<<<.mine .....=======之间的代码是你自己的,
======......>>>>>>>.r5是别人与你冲突的代码部分
这样就不难理解为什么会产生冲突这种奇怪的东西了,因为你们修改的同一块代码,当然会产生冲突。
解决办法一 : 使用revert(回滚)操作
该操作表示用户放弃自己的更新代码,然后直接提交,这个时候你的代码就会使服务器上最新的代码,即A用户提交的新代码,你的代码不会被提交.
点击ok按钮后 可以看到其他三个文件都自动删掉了,1.txt代码变成如下代码:
66666666666aaaaaaaaaa666
也就是a用户提交的代码,我自己更新的代码需要自己动手复制进去即可提交commit。
解决办法二 :
选择文件->右键Editconficts:这种方法需要冲突双方经过协商之后将代码更改统一之后再提交。不仅解决了冲突而且还保证了代码是正确的,因为只有一方的代码被提交.
如上图所示,红色的部分是冲突代码:
theirs表示当前服务器端最新的代码,
Mine表示自己修改后的代码,
Merged表示合并后的代码。
点击红色后右键选择:use this text block就可以将该部分代码作为合并后的代码
1.8 SVN提交(SVN Commit)
Svn的提交是将在工作空间做的修改进行提交,包括文件内容的修改,文件或目录的添加,删除,命名,移动等操作
1.9 显示日志(Show log)
通过此功能可以查到谁,什么时候,对那个目录下的那些文件进行了那些操作
1.10 版本库浏览(Repo-browser)
此功能是用来浏览需要查看的资料库,在本地文件夹下点击右键,选择TortoiseSVNàRepo-browser,
2 分支操作
2.1 主干合并到分支
- 首先,在本地trunk中先update一下,有冲突的解决冲突,保证trunk和repository已经完全同步
- 然后在/branches /MyProject上右键,依次选择”TortoiseSVN” -> “Merge…
- 在弹出的窗口中选择第一项”Merge a range of revision”,这个类型的Merge适用于将某个分支或主线上提交的多个revision间的变化合并到另外一个分支上。
- 由于是要从trunk合并到branch,理所当然这里的”URL to merge from”应该填trunk的路径,”Revision range to merge”很好理解,就是你要将trunk的哪些revision所对应的变化合并到branch中
- 在点击Merge按钮前你可以先Test merge一把,看成功与否,以及merge的详细信息。点击Merge按钮后trunk所做的修改将同步到branch中。
- 至此,branch 已经完全和 trunk 同步,合并发生在本地 working copy,只要你不提交就不会影响到 repository。所以我们和合并操作后,处理好冲突(如果存在冲突)后,将代码提交到 repository。
2.2 分支合并到主干
在/trunk/MyProject上右键(注意是在主线的目录上右键),依次选择”TortoiseSVN” -> “Merge…”。
后续操作和 “分支合并到主干” 一样,其实你可以把主干也理解为一个分支 “主分支”。
因为我们把分支合并到分支一般是分支开发完毕后,所以在一般选择 all revisions ,当然你如果只想合并一部分到主干,一样可以选择 specific revisions 指定版本号合并。
// 合并到哪里就在哪个目录下点击TortoiseSVN” -> “Merge
// 合并只发生在本地working 中,还要提交一次到repository中。
2.3 分支建立
- truck主干版本为例,我们要以它为基础建立一个分枝。
- 选择新建分枝标记。
- 在这里要输入新建分枝的位置,我们选择了braches目录作为分枝的路径,以及名字为new_truck
确认建立成功;新建成功可以在游览器中查看新建分支。
2.4 创建分支
右击已经存在的SVN项目->branch/tag,弹出框的to path输入新的分支名称,建议/branch/xxx,点击OK就创建出xxx分支.(建议创建前先svn update)
2.5 切换分支
右击已经存在的SVN项目->switch,弹出框的to path输入分支名称,上面新建了/branch/xxx分支,如果想要切换/branch/xxx分支,则输入/branch/xxx点击OK.
2.6 合并分支
右击已经存在的SVN项目->merge->merge a range of revisions->URL to merge from选择需要合并的代码分支,specific range输入框选择show log选择需要合并的版本号区间,然后一路next完成合并,如果有冲突解决完代码冲突,需要svn commit才能完成合并.
2.7 删除分支
右击已经存在的SVN项目->repo browser,弹出框的左边选择需要删除的分支右击->delete
3 概念理解
4 SVN服务器搭建和使用
4.1 下载安装SVN服务器
http://subversion.apache.org/packages.html,
Location是指VisualSVN Server的安装目录,
Repositorys是指定你的版本库目录.
Server Port指定一个端口,
Use secure connection勾山表示使用安全连接,
4.2 建立版本库
4.3 需要建立用户和组,并且需要分配权限
4.3.1 新建用户
4.3.2 新建用户组
4.3.3 用户组设置权限
选择Security选项卡,点击Add按钮,选中longen0707,然后添加进来,权限设置为Read/Write,如下图:
4.4 客户端SVN安装
checkout项目文件。
4.5 客户端SVN汉化
将下载之后的文件“LanguagePack_1.14.5.29465-x64-zh_CN.msi”安装
如果不慎没有勾选,还可以在这里设置: