使用背景
- 电脑发生故障,文件没有备份而丢失了
- 由于人员离职,导致某些资料丢失了
- 我怎么知道手头的公共资料是不是最新版呢?
- 想要追溯几个月前的某个状态,却发现那个版本的文件已经被当作垃圾删除了
- 每天要花费很多时间来向别人提供需要共享的资料
- 相似的应用系统,每次都重复开发,难以复用
- 一个软件被用于多个项目,发现其中存在一个BUG,所有这些项目都要进行修复
- 人员分布在两地开发,版本如何同步
- 甲乙两人为不同目的修改了同一份文件,乙的提交在甲提交之后,导致甲修改的内容丢失了
一 简介
是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源以及实现最终集中式的管理。
SVN的全称是Subversion,即版本控制系统。它是最流行的一个开放源代码的版本控制系统。作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中央资料档案库(Repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样就可以把档案恢复到旧的版本,或是浏览文件的变动历史。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括程序源码。
SVN采用客户端/服务器体系,项目的各种版本都存储在服务器上,程序开发人员首先将从服务器上获得一份项目的最新版本,并将其复制到本机,然后在此基础上,每个开发人员可以在自己的客户端进行独立的开发工作,并且可以随时将新代码提交给服务器。当然也可以通过更新操作获取服务器上的最新代码,从而保持与其他开发者所使用版本的一致性。
SVN的客户端有两类,一类是基于Web的WebSVN等,另一类是以Tortoise SVN为代表的客户端软件。
前者需要Web服务器的支持,后者需要用户在本地安装客户端,两种都有免费的开源软件供使用。
二 安装SVN服务器
1. 首次查看服务器(虚拟机)是否安装了SVNServer
rpm -qa |grep svn
2. 如果没有安装,执行
yum -y install subversion
3. 安装好了之后,新建一个SVN目录
mkdir /home/svn
4. 新建一个版本仓库
svnadmin create /home/svn/project
# project是版本仓库名,在配置文件中会用到
5. 将你需要放在svn上的工程,放进project目录中
#例:
cd /home
mkdir my_files
cd my_files
touch text.txt
mv /home/my_files/ /home/svn/project
6. 初始化版本仓库
命令:
svn import 需要放到svn上的文件夹/ file:///home/svn/project -m “版本说明” --username xx --password xx
这里需要注意的是,如果后边不加用户名和密码,可能导致客户端在update时,不需要输入用户名和密码就可以update
svn import /home/svn/project/my_files/ file:///home/svn/project/ -m "create a
directory" --username zll --password root
7. 添加用户
要添加SVN用户非常简单,只需在/home/svn/project/conf/passwd文件添加一个形如“username=password”的条目就可以了
8. 修改用户访问策略
/home/svn/project/conf/authz记录用户的访问策略。
直接查看[groups]配置项
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
# 这个配置项的规则是:组名 = 组下面的用户
root = root,zll
#[repository:/baz/fuz]
#[project:/] 如果你的仓库下边就一个版本的话 就不需要使用xxx 直接一个斜杠就完事
#[project:/xxx] 如果你的仓库下边有多个版本的话xxx就是那个文件夹的名字
# @harry_and_sally = rw 表示为某个组赋予什么样的权限,r表示可读,w表示可写
# * = r 通配符*表示选择其他所有组,其他组的权限为可读
[project:/] # 表示选择project下面所有的放到svn上面的版本
@root = rw
* = r # 后面可以不写权限,表示任何权限都不赋予
# 经过测试发现,svn server 配置权限的时候,需要在每一个文件夹下给所有用户组配置权限,否
#则会出现认证失败的现象。也就是说,当配置好需要拥有权限的用户组后,还需要为其他组赋予权限。
9. 修改svnserve.conf文件,让用户和配置生效
[general]
anon-access = none
auth-access = write
password-db = /home/svn/project/conf/passwd
authz-db = /home/svn/project/conf/authz
10. 启动服务器
svnserve -d -r /home/svn
11. 测试服务器
svn co svn://192.168.x.x/project
只要看到Checked out revision 1 就表示服务器已经建立成功。
到此为止独立svn服务器就建立好了
12. 注意:
如果客户端想要使用的话, url地址一定是这个样子的:svn://192.168.x.x/project,不是https开头。如果想要使用http的头的话 需要配置SVN服务器的HTTP支持。
13. 常用svn命令
1. svn up/update 更新代码
2. svn st/status 查看修改状态
3. svn ci -m “” 提交代码
4. svn add +文件或目录 添加新文件或者目录
5. svn del 文件或者目录 删除文件或者目录
6. svn resert 文件/目录 将已经修改了的代码恢复到初始状态
7. svn co/checkout svn://192.168.X.X/ 下载库上的代码
8. svn diff 文件或者目录 比较修改前后的文件
三 安装SVN客户端
官方下载地址: https://tortoisesvn.net/downloads.html
开始安装客户端:
Next -->Next-->1.选择安装路径 2.Next-->Install
安装语言包:
下一步-->完成
四 SVN客户端的配置
这里要特别声明一下——SVN客户端不是指一个桌面应用程序,而是集成到系统的右键菜单中的插件。因此使用客户端向资源库下载项目资源、提交项目资源等都是通过右键菜单来完成的。修改默认语言项为简体中文
五 SVN菜单
六 SVN操作
6.1 检出
用于客户端第一次从SVN服务器上下载版本库数据
注意,这里使用虚拟机模拟企业环境,想要在Windows客户端连接Linux服务端,需要先把Linux
端的防火墙关闭。命令:systemctl stop firewalld
在本地新建一个目录用来存放要下载的版本库
进入到新建的目录中,在空白处点击右键,选择“SVN检出”
-
在版本库URL中输入版本库地址:svn://192.168.x.x/project
-
输入配置好的用户名和密码
-
下载该版本库下的项目
绿色对勾图标: 当客户端文件与服务器文件完全同步的时候,系统就会显示以上图标
6.2 提交
用于将客户端的改动上传到SVN服务器
-
在本地任意受SVN控制的目录或文件中进行改动,比如在目录中创建新的文件
-
在目录中的空白地方点击右键,选择“SVN提交”
-
SVN自动检查该文件夹客户端的改动,并将其列在弹出窗口的“变更列表”栏;在弹出窗口的“信息”
栏写上对此次提交的注释,以便将来追溯;点击“确定”将客户端的改动上传到服务器。
6.3 更新
用于客户端从SVN服务器下载最新版本库。
-
在服务器端检出一份版本库,在检出版本库中进行文件的操作
- 选择本地受SVN控制的目录,右键点击空白的地方,选择“SVN更新”,更新完成点击“确定”。
6.4 删除
用于在受SVN控制的状态下,删除文件或文件夹。
“删除”仅是对客户端的文件进行操作,并不改变服务器上的内容,需要执行“提交”操作才会将删除操作上传到服务器;将“删除”操作“提交”到服务器后,仅是从服务器的最新版本中删除了此文件或文件夹,在历史版本中仍可找回此文件或文件夹;
1.首先删除本地的某个文件 - 在一个空白目录下,点击右键选择“SVN检出”,在URL输入框输入版本库的地址,查看当前检出的版本库内容
6.5 改名
用于在受SVN控制的状态下,对文件或文件夹改名。
“改名”仅是对客户端的文件进行操作,并不改变服务器上的内容,需要执行“提交”操作才会将改名操作上传到服务器。不要用Windows“重命名”来实现改名,因为这个操作不受SVN控制,SVN会将其理解为删除原文件、增加一个新文件,从而导致文件改名后不能跟踪到改名前的状态
1.选中要改名的文件,点击鼠标右键,点击SVN菜单中的“改名”
6.6 移动
用于在受SVN控制的状态下,移动文件或文件夹的位置。
-
在受SVN控制的某层文件夹或文件上点右键,选择“TortoiseSVN-版本库浏览器”
-
在弹出窗口拖动文件夹或文件到需要的位置
- 由于是对服务器版本库直接操作,移动后将自动执行一次“提交”操作。
- 移动完成后需要在客户端执行一次“更新”,以下载最新状态
6.7 更新至版本
用于取出文件的某历史版本。
1.在受SVN控制的某层文件夹或文件上点右键,选择“TortoiseSVN-更新至版本…”
-
在弹出窗口中填写要取的版本号,点“确定”取回该版本。
七 SVN常见图标
当客户端文件与服务器文件完全同步的时候,系统就会显示以上图标
当客户端文件与服务器数据存在冲突时,系统会出现以上图标
当服务器端的文件已经删除时候,那么客户端文件就会显示以上图标
我们编写的文件已经提交到队列中,系统会显示以上图标
我们编写的文件没有提交到队列中,系统会显示以上图标
客户端文件已经修改但是未提交,系统会出现以上图标
当客户端文件以只读的形式存在时,系统会出现以上图标
当服务器数据已经锁定的时候,客户端文件会自动显示锁定图标
客户端文件已经忽略,不需要进行提交上传,系统会显示忽略图标。