1.SVN介绍
SVN是Subversion的简称,是一个自由开源的版本控制系统。
Subversion将文件存放在中心版本库里,这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文
件和目录的修改情况,这样就可以借此将数据恢复到以前的版本,并可以查看数据的更改细节
早期版本控制使用的是CVS,后来SVN替代了CVS,随着android兴起,出现Git版本控制工具,后续我们会学到。
1.1 SVN基本概念
问题: 怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰?
复制-修改-合并方案(Subversion默认的模式)
在这种模型里,每一个客户读取项目配置库建立一个私有工作副本— —版本库中文件和目录的本地映射。用户并行工作,修改各自的工作副本,最终,各个私有的复制合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。
1.2 SVN架构
可以运行在什么系统:
Subversion支持Linux和Windows,更多是安装在Linux下。
svn服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊,用户可以自行选择。
svn存储版本数据也有2种方式:BDB一种事务安全型表类型和FSFS一种不需要数据库的存储系统。
因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。
2 SVN使用
SVN是一种集中式管理代码的版本控制系统,原理就是把代码都保存到一个固定的位置(仓库),每次从这个位置拷贝更新代码,进行编辑;再把修改后的代码提交到该目录中。多人协作开发也是如此。因此需要一个类似Oracle或者Mysql的服务器用于保存和管理库文件(要保存的代码等文件)的服务端——VisualSVN Server。还需要一个用户的操作端,用于提交更新检出代码,常用的有idea的Svn插件,以及TortoiseSVN(小乌龟)。
SubVersion 官网:http://subversion.apache.org/
2.1 服务器端VisualSVN安装与配置
2.1.1 VisualSVN下载 (服务端)
2.1.2 VisualSVN安装与创建仓库
如果出现这个是因为端口号被其他占用了:改一下端口号
查看是否安装成功并且运行:
通过快捷键win+R然后搜索services.msc
并且查看是否启动
在运行中查找visualSVN Server Manager就可以打开图形化管理界面:win+s并且搜索
SVN图形界面:
2.1.3 VisualSVN创建工程目录
创建一个仓库:
2.1.4 VisualSVN 权限控制
创建用户用于访问仓库:
创建组:意思是可以把多个用户放在一个组里面。
分配权限:用于给仓库分配谁可以访问
可以通过浏览器访问仓库:
2.2 客户端TortoiseSVN安装与使用
2.2.1 TortoiseSVN下载 (客户端)
看你什么系统是64位的还是32位的要下对应的版本
2.2.2 Tortoise SVN安装
下载完成后点击下一步下一步安装即可。
如果使用IDEA那么安装时要选择这个
注:安装后需要重启电脑
右键就可以查看到客户端SVN
2.2.3 Tortoise SVN 常用操作
2.2.3.1 浏览仓库
输入要浏览的仓库连接
正常情况下第一次都是需要账户和密码登入:
登入成功是这样的:
如果需要清除账号和密码:
2.2.3.2 checkout
检出svn服务器上的项目
注意:检出后会有一个.svn隐藏目录
2.2.3.3 add
我们要把这个交给svn管理,那么右键要被管理的文件选择add
有一个加号的标志
2.2.3.4 commit
2.2.3.5 update
Update,它是更新操作,可以将svn服务器上的内容更新到本地
演示: 结合 checkout+commit+update
现在需要创建一个小刘文件夹并且把svn的数据下载下来
通过checkout下载
里面的内容
现在小王写了新的代码:
并且通过commit提交到svn服务器
现在小刘需要获得之前小王写的新的代码
通过update获取
此时你会发现小王更新的代码,通过update命令,现在小刘的代码和小王是一样的。
2.2.3.6 更新到历史版本
查看当前日志
可以发现代码已经变成了小王第一次添加的代码一样
也可以通过下面的方式来更新历史版本
2.2.3.7 delete
标记删除操作,本地文件会删除,我们需要进行提交,才能真正从服务器删除
这样子只删除了本地的代码,如果需要服务器也删除,那么要commit一下才会删除。
2.2.3.8 导入与导出
Import将本地资源导入到svn服务器
Export导出项目,和checkout的区别,它不存在.svn隐藏文件
2.2.3.9 冲突问题与解决
多个用户同时操作同一个文件时,就可能产生冲突情况。
有是小王和小刘的代码版本都是6,但是小王更改了代码,提交到svn服务器版本号变成7了,然后小刘他没有通过update命令向svn服务器更新代码,而是直接在版本6的基础上更改代码,然后提交,就会出现这个问题。
Hello.java 它是服务器上的文件与本地文件合并
Hello.java.mine 本地修改后的文件
Hello.java.r6 修改前的文件
Hello.java.r7 对方修改后的文件
保存然后退出
解决冲突后在通过commit提交服务器。
2.3 IDEA下 SVN 配置与使用
2.3.1 IDEA下svn配置
前提是我们的电脑上已经安装了TortoiseSVN.并且安装时有选择这个。
找到svn客户端的bin下的sun.exe文件位置
这样安装就完成了。
IDEA安装完svn 按钮介绍
导航栏就会多出这些按钮:
1.Update Project 更新项目
2.Commit changes 提交项目上所有变化文件
3.Compare with the Same Repository Version 当前文件与服务器上该文件通版本的内容进行比较。如果当前编辑
的文件没有修改,则是灰色不可点击。
4.Show history 显示当前文件的历史记录
5.Revert 还原当前被修改的文件到违背修改的版本状态下
1.Local Changes 本地修改过的文件都会出现在这里
2.Repository svn仓库所有提交记录
3.Incoming 本地还没有更新的别人提交的代码
2.3.2 IDEA 下SVN使用
演示把本地的项目安装到svn服务器中
首先创建一个仓库用于存放本地代码
IDEA项目添加到svn服务器演示
点击加号把地址粘贴进去
2.3.2.2 IDEA 的 checkout
把svn服务器的资源下载下来
选择你要的资源
2.3.2.3 IDEA 的 add commit update
提交一个工程到服务器commit
测试update,本地其他用户上传新的测试方法。
可以看见通过更新把服务器的最新代码下载下来了。
2.3.2.4 IDEA 的 ignor
2.3.2.4.1 忽略上传文件
由于不同的用户使用的环境不同,因此有些文件不用上传到svn服务器,比如有的用户使用的是idea,而用的用户使用的是eclipse,由于使用的工具不同,因此上传的时候需要忽略其环境文件,只要上传pom.xml和src目录下的文件即可,那么无论使用的是哪个工具都可以通过这两个文件生成工程并进行操作。
添加忽略文件:
忽略文件如下:可以选择按规则匹配
1、.idea
2、target
3、*.iml
补充:在设置中也可以设置过滤项(与上面过滤设置效果一样
2.3.2.5 IDEA 的 解决冲突
改完以后记得重新commit一下。
3. SVN规范
3.1 SVN目录规范
在visualSVN中创建仓库时,可以选择svn目录结构
创建好,你会发现三个文件夹:
Trunk 主干目录,此目录下的文件为基准文件 (存放我们的代码,也可以修改代码)
Branches 用于开发的分支目录 (分支是用于存放第二次开发的代码)
Tags 用于发布的版本目录 (用于发布的代码,只读)
举例
假设有一个项目OA,我们完成了1.0版本,这时就可以打一个tags
后续我们在OA项目上添加一个新的模块(及时通讯),我们就可以开一个分支,又有一个公司需要在我们OA基础上添加
财务管理模块,我们又可以打一个分支。
我们后续针对OA的1.0版本在升级,我们不需要原来附加功能,就可以在原来的主干上继续开发,形成OA2.0版本,
开发完成后就可以在打一个tags
3.2分支与标记
3.2.1.分支或标记规范
分支的定义规则: Project name+日期时间+功能点 Tags的定义规则 Project name+版本号 版本号定义为三段数字
编号 xxx.xxx.xxx 第一个:革命性的产品升级版 第二个:新功能版 第三个:修正bug
3.2.2.打分支或标记
命名规则:项目名称+时间+新的功能
Tags一般是只读,它代表的是发布的版本,所以我们不要进行改变。
3.3 主干与分支或标记的合并
3.3.1 主干合并到分支
首先保证主干是最新的(先update),在分支这边进行操作
这里我们是主干合并分支
3.3.2 分支合并到主干
首先保证分支是最新的(先update),在主干这边进行操作,步骤和上面一样。标记的合并也一样。
注意:不管是标记合并还是主干与分支的合并,都有可能出现代码冲突,这个时候就需要我们认为干预。
演示:把代码上传到有svn的目录结构的主干文件夹:
忽略一些不必要上传的文件
比如:这些还有target文件不要上传
然后在项目右键通过commit提交到服务器
出现这个窗口然后commit
现在查看svn服务器的代码
提交上去了。
我们现在演示一下分支,在本地创建一个文件夹小赵,我们checkout去svn仓库下载对应的代码
这时我们把主干的内容下载下来了
现在我们打分支或者标记
命名规则:项目名称+时间+新的功能
查看仓库这样分支就打好了,标记也是一样的道理,只不过存放的位置不太一样。
Tags一般是只读,它代表的是发布的版本,所以我们不要进行改变。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/83940.html