简介
SVN是什么?
代码版本管理工具
它能记住你每次的修改查看所有的修改记录
恢复到任何历史版本
恢复己经删除的文件
SVN跟Git比,有什么优势
使用简单,上手快
目录级权限控制,企业安全必备
子目录Checkout,减少不必要的文件检出
主要应用:
开发人员用来做代码的版本管理
用来存储一些重要的文件,比如合同
公司内部文件共享,并且能按目录划分权限
SVN仓库
推荐: svnbucket.com,sVN桶现在最好用的SVN服务
安装sVN客户端
TortoisesvN windows推荐cornstone mac推荐
svnbucket.com(sVN桶)官网如下:也有使用教程
svn使用教程 · SVN使用教程
下载安装svn客户端
可参考:svn客户端下载 · SVN使用教程
从而下载win的64位的TortoiseSVN客户端
官网下载太慢,也可找别的渠道下载,如【TortoiseSVN下载 中文版】TortoiseSVN 1.14.5-ZOL软件下载
下载后,点击安装直接next。
下载汉化包:还是找到上面官网svn客户端下载 · SVN使用教程
下载后运行安装,安装最后一步勾选配置TortoisesvN使用这个语言。即可。
sVN基本操作:
检出checkout新增add
提交commit更新update
历史记录
SVN基本操作
1、进入官网,注册登录后,项目列表点击加号创建一个项目,输入名称和描述,可先不勾选那个创建三个目录的按钮。
SVNBucket - SVN仓库,免费 SVN 代码托管服务器,不限私有,不限成员
2、点击这个项目,点击复制SVN地址如svn://svn.svnbucket.com/svn_3284514536/svnbucket/
3、桌面上创建一个目录,如workspace,点进去,点击右键,然后点击svn检出,再给他加一层目录后点击确定,输入svn的用户名和密码即可。
4、进入该目录C:\Users\kongdeyi\Desktop\workspace\svnbucket后,发现一个.svn文件夹,我们在这个C:\Users\kongdeyi\Desktop\workspace\svnbucket目录下从别的地方copy几个文件放进去。右键svn提交,然后第一个框中输入描述,第二个框中选择要提交的内容,也可点击全选全部选中,然后确定即可。
5、然后再是svnbucket网站中可看到提交的内容和记录等
6、我们修改一下pojo中的User实体类中的内容,然后再次在.svn文件夹所在的目录点右键svn提交,提交前可双击查看文件变更的内容差异:
确定没问题后,确定提交即可。
7、svnbucket网站上该文件查看发现是经过修改后的内容。
8、查看日志:在该C:\Users\kongdeyi\Desktop\workspace\svnbucket\文件夹或子文件夹中右键tortoiseSVN选择显示日志即可查看之前提交的内容。
在svn提交之前先右键的svn更新是一个比较好的习惯,可避免覆盖原文件。
撤销和回复
撤销和恢复:
撤销本地修改撤销已提交内容
恢复到指定版不
第一种情况:比如我们修改了pojo下的User类将类名改成User666,只是在本地还未提交,我们想到这个是个错误的修改,我们可右键tortoiseSVN中选择还原,也可在svn提交的时候,检查一下修改的内容后,提交窗口中右击该文件选择svn还原。
第二种情况,当我们将修改成错误的内容文件提交上去了,提交完后发现该pojo下的user类刚刚修改成user666是有问题的。
可先在右键tortoiseSVN中日志中看到这次提交的文件,点开发现和之前修改的区别确实是改错了。我们可在下图位置右键,选择复原此版本做出的修改。
然后现在只是本地恢复正常了,但我们还需要提交到仓库,右键svn提交即可
第三种情况是我们想恢复到一个比较早的版本,恢复到指定版本:
右键tortoiseSVN中日志中,想要复原到的版本,右键复原到此版本
现在还是只是本地修改了,我们还需要svn提交。
添加忽略
忽略不想提交的文件:
C:\Users\kongdeyi\Desktop\workspace\svnbucket文件夹下的pojo我们不想pojo文件夹提交了,我们可右击这个pojo文件夹,tortoiseSVN->去除版本控制并增加到忽略列表,选择pojo即可。
然后,先svn更新后svn提交,就会将这些删除pojo目录的本地提交到远程仓库。
也可在svn提交的时候,在第二个框中,对某个文件或文件夹右键,选择增加到忽略列表也可。
又不想忽略这个pojo文件夹或其他已经被忽略的文件呢?
右击这个被忽略的文件或文件夹,tortoiseSVN选择加入,或选择从忽略列表中删除。然后svn提交即可。
解决冲突
什么情况容易发生冲突?
1多个人修改了同个文件的同一行2无法进行合并的二进制文件
怎么避免冲突?
经常update同步下他人的代码二进制文件不要多个人同时操作
冲突了怎么办?
解决冲突很简单,不用怕
版本冲突原因:
假设A、B两个用户都在版本号为100的时候,更新了kingtuns.txt这个文件,A用户在修改完成之后提交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns.txt文件的版本号已经变成101了。同时B用户在版本号为100的kingtuns.txt文件上作修改,修改完成之后提交到服务器时,由于不是在当前最新的101版本上作的修改,所以导致提交失败。
别人修改了pojo下的User中类名改为User666并提交了,本机电脑没有update这个最新版本的,在上一个版本中也修改了User类的类名这一行的代码为public interface,然后svn更新,或只选中这个User类进行svn更新这一个文件,就会报冲突,会生成几个这个User文件,mine是本地的,r7和r9是版本7或9的,参考下图:
解决方法:
然后右击爆红的地方,可使用他的,丢弃我的,也可丢弃我的,使用它的。也可编辑冲突:
编辑冲突,可以在他的或我的冲突的这行右击这一行,使用某个正确的文本块,如下:
确定后,更新成功,本地恢复正常了,解决冲突了。
对于修改二进制文件,比如图片,用别的地方某个同名图片覆盖掉svn项目中的某个图片。然后svn更新,就会产生冲突。右击爆红的冲突这行,可选择使用他们的还是使用我的,或选择编辑冲突,选择要本地现在的副本的,还是上一个版本的,还是远程的。
分支
什么时候需要开分支?
隔离线上版本和开发版本
大功能开发,不想影响到其他人,自己独立开个分支去开发
sVN经典目录结构:
trunk 主干,开发中的文件 ,平时在主干上开发,开发后用那个版本可开一个分支存储到branch中。
branches 分支tags 标签
1、可在vnbucket中创建项目的时候勾选那个创建分支接口的选框。
2、自己创建:
先创建这三个文件夹,然后将之前该svnbucket文件夹中的工作文件放到trunk目录中,svn提交,选择全部文件提交即可。
开发就在主干上开发,开发完成要上线了,就可开一个分支。
1、右击trunk文件夹,ortoiseSVN选择分支/标记,选择至路径branches,加个onlinev1.0
填写信息,选择版本库中的最新版本
点击确定即可
2、更新一下C:\Users\kongdeyi\Desktop\workspace\svnbucket svn更新,然后branches目录下就会有onlinev1.0文件夹,里面就有trunck分支下的所有内容复制了一份。
这样会有个问题,以后分支越来越多,要更新的内容也会越来越多,我们可将分支单独checkout一份出来:
右击这个文件夹,选择属性
选择subVersion,复制全部的url:
回到workspace,在这个目录右击,选择svn检出,也可改个名字,确认即可:
然后同理,sgvnbucket目录下的trunk目录也可属性复制url,在workspack目录下检出一份。这样svnbucket目录就可删除了,结果如下
这样在主干修改的内容提交不会影响分支,分支修改提交也不会影响主干。
合并分支
分支上修改的内容怎么同步到主干上呢,如分支上修改bug,要同步到主干上:
workspace目录下右击这个svnbucket-onlinev1.0文件夹,ortoiseSVN选择显示日志。选中某个版本,合并版本到:
合并版本到,选择主干的文件夹:
本地主干目录合并好了,我们在主干目录svn提交到远程仓库
分支切换
再开一个分支:
右击workspace目录下的svnbucket-trunk目录,选择tortoisesvn,选择分支/标记,选择branches分支,起个名onlinev2.0,确认即可。
右击这个svnbucket-onlinev1.0, tortiosesvn,选择切换:
可下拉切换,或点右侧选择路径切换
确定后,右击这个svnbucket-onlinev1.0属性,就看到切换成2.0了
当然,我们可以给这个文件夹改个名字:
也可点进C:\Users\kongdeyi\Desktop\workspace\svnbucket-online,右击后 tortiosesvn点击版本库浏览器,查看结构
代码暂存
有什么用?
1.代码改了很多,突然需要紧急修复一个bug,但是代码还没写完,不能提交。2.代码重构了很多,突然需要发布新版本,但是代码还跑不起来,不能提交。
C:\Users\kongdeyi\Desktop\workspace\svnbucket-trunk\pojo中的User类,我们修改了一些代码,带还没改完,不应该提交。我们右击后Tortoise中选择汉化翻译的贮藏
上面两个按钮,一个不保留修改,一个保留修改。
取出暂存,我们右击后Tortoise中选择汉化翻译的取消贮藏,选择暂存的文件来取出暂存
复杂代码合并
上面分支部分学了在日志中选择某个版本合并到另外一个分支上去。
情况:
主千开发新功能,改了很多
分支是线上版本,修复了很多bug
两个分支的代码时间久了差异很大,无法直接分支合并或者指定提交记录合并代码
使用BeyondCompare
下载:下载 | Beyond Compare 中文官方网站
安装后使用
选择文件比较,选择将路径分别粘贴到左右:
选中右键比较内容,直接点开始,
上方选择差别菜单,也可选择全部。
点开这个User.java文件:
点左边这个,将右边替换,点击右边这个将左边替换。然后修改完后,再ctrl+s可保存。
然后就可按需合并修改了。然后再把代码提交上即可。