目录
一、SVN简介
SVN是Subversion的简称,是一种开放源代码的版本控制系统。它采用分支管理系统实现高效管理。简单点说,当多个人共同开发同一个项目时,可通过SVN实现资源共享和集中管理。
SVN采用客户端和服务器体系。常用VisualSVN server 服务端和 TortoiseSVN客户端。
二、SVN服务端搭建和配置(Linux)
1. 检查已安装版本
检查是否安装了SVN
# rpm -qa subversion
如果存在旧版本,卸载旧版本SVN
# yum remove subversion
2. 安装SVN
# yum -y install subversion
此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行。
3. 验证安装
# svnserve --version
4. 版本库创建
SVN软件安装完成后还需要建立SVN库,建立之前要查看各目录内存的大小以保证版本库有足够的空间,用以下命令查看:
# df -h 路径
通过以下命令建立版本库:
# mkdir /var/svn/svnrepos
# svnadmin create /var/svn/svnrepos/xxxx (xxxx为你预期的版本库名称,可自定义)
查看/var/svn/svnrepos/xxxx文件夹发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。
5. 配置版本库
进入上面生成的文件夹conf下,进行配置
# cd /var/svn/svnrepos/xxxx/conf
6. 用户密码passwd配置
# vim passwd
修改passwd为以下内容:
[users]
# harry = harryssecret
# sally = sallyssecret
hello=123
这样我们就建立了hello用户,123密码(用户名=密码)
以上语句都必须顶格写,左侧不能留空格,否则会出错。
7. 权限控制authz配置
# vi authz
目的是设置哪些用户可以访问哪些目录,向authz文件追加以下内容:
[groups]
php=yonghu,yonghu2,yonghu3 #创建用户分组,可对组进行权限、访问目录设置
android=yonghu5,yonghu6
[/] # [/]代表版本库目录下所有的资源
hello = rw #意思是hello用户对版本库下所有的目录有读写权限,当然也可以限定。
[/adnroid] #[/adnroid]代表版本库目录下的android文件夹
@android=rw #android组的用户拥有读写权限
以上语句都必须顶格写,左侧不能留空格,否则会出错.
8. 服务svnserve.conf配置
# vim svnserve.conf
将以下内容的注释去掉,并把read改成none,左侧不能留空格,否则会出错:
anon-access = none 一定要改成none,否则log不能显示
auth-access = write 表示认证用于允许写
password-db = passwd 表示使用passwd文件来进行账号密码认证
authz-db = authz 表示使用authz文件用户权限认证
realm = /svn 表示将/svn目录做为SVN服务器的工作目录。
9. 配置防火墙端口
systemctl start firewalld #启动Firewall
systemctl enable firewalld.service #设置开机自启动
firewall-cmd --add-port=3690/tcp –permanent
firewall-cmd --reload
10. 启动SVN
svnserve -d -r /var/svn/svnrepos
11. 查看SVN进程
# ps -ef|grep svn
12. 检测SVN 端口
# netstat -ln |grep 3690
提示tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN即可
13. 停止重启SVN
# killall svnserve
# svnserve -d -r /var/svn/svnrepos
如果已经有svn在运行,可以换一个端口运行
svnserve -d -r /var/svn/svnrepos --listen-port 3391
14. 设置SVN服务开机自启动
编辑svn service 配置文件,目录:/etc/sysconfig/svnserve
# vi /etc/sysconfig/svnserve
将OPTIONS里的值改为当前服务器上svn 版本库的目录
# OPTIONS="-r /var/svn/svnrepos"
改完后退出并保存,然后在命令行输入:
# systemctl enable svnserve.service
最后重启服务器:
# shutdown -r now
开机后查看svn是否自启动:
# ps -ef|grep svn
出现如下信息就是成功了。
15. 测试
SVN服务已经启动,使用window客户端测试连接。客户端连接地址: svn://ip地址:3690/xxxx (iP地址为你linux的ip,xxxx为前文创建的版本库名称,3690为svn默认端口)。弹出输入用户名和密码,即可访问测试创建文件夹等操作。
三、SVN客户端安装及使用
1、SVN客户端安装
在Windows常用的客户端为TortoiseSVN,下载地址Downloads · TortoiseSVN,根据电脑情况选择相应的安装包。
这里有些需要注意的地方:
如果需要使用命令行,下图标注处可以选择上:
2、SVN客户端使用
(1)下载文件
在本地新建一个文件夹(假设为project)用于存放下载的文件。
右键点击该文件夹,会出现如下窗口,点SVN Checkout。
此时会弹出认证窗口,输入URL、用户名和密码即可。
如果想下载部分文件,可以选择chose items:
在该文件上右键点击SVN Commit:
写上对此次提交的说明:
在新增文件上右键进行如下操作,将该文件加进版本库:
之后在该文件上右键点击SVN Commit进行提交,并对本次提交进行说明。
在该文件上右键并进行如下操作,此时只是在本地删除了,服务器上并没有删除。
若想恢复该文件则在空白处右键进行如下操作:
本地删除后,在空白处右键点击SVN Commit提交后,该文件在服务器上就也删除了,不可以恢复。
在当你本地的文件不是最新版本时,你修改后在进行提交就会出现错误:
此时需要更新你本地的文件,更新后再修改提交。
(5)冲突问题
别人修改了某个文件的一个位置并提交后,你对该位置也进行了修改,提交时会出现更新问题。更新之后会出现冲突问题:
这是因为此时系统不知道到底是谁对,此时需要查看该文件的两个修改,确定到底哪个对(需要和别人商量),把错误的修改删除。之后告诉SVN冲突解决了:
之后在提交就没问题了。
(7)版本回滚
发现自己写的代码有问题,但是已经提交上去了,别人也已经更新或下载了你的错误代码,这时候就需要版本回滚。
在错误文件上右键:
然后选择需要回滚的版本:
但此时,只是你本地的代码回滚了,SVN服务器上的并没有回滚,此时就需要提交一下。
(8)其它功能说明
- Repo-browser:在本地查看SVN版本库,可以在本地对里面的文件进行管理,如新建删除。
- Check for modifications:可以查看对该文件你做了哪些修改还没有提交;也可以看别人对该文件做了哪些操作,但你还没更新。
- Revision graph: 查看文件的分支,版本结构,可以点击Revision Graph,系统以图形化形式显示版本分支。
- Rename:更改文件名,更改后需要提交。
- Clean up: 如果当前工作拷贝有任何问题的话,可以使用这个选项进行修正。例如,有些文件原来是版本控制的,但是你没有通过tortoiseSVN就直接删除了,但是tortoiseSVN还是保留着原来的信息(每个文件夹下都有一个.svn的隐藏文件夹,存放着当前文件夹下所有文件夹的版本信息)所以这就会产生一些冲突。可以使用cleanup来清理一下。
- Get/Release lock: 如果你不想别人修改某个文件的话,那么你就可以把这个文件进行加锁,这样可以保证只有你对这个文件有修改权。除非你释放了锁,否则别人不可能提交任何修改到配置库中。
- Branch/tag: 当需要创建分支,点击Branch/Tag,在弹出的提示框中,输入分支文件名,输入日志信息,点击确定,分支创建成功,然后可查看文件的版本分支情况。
- Switch: 文件创建分支后,你可以选择在主干工作,还是在分支工作,这时候你可以通过Switch来切换。
- Merge: 主干和分支的版本进行合并,在源和目的各输入文件的路径,版本号,点击确定。系统即对文件进行合并,如果存在冲突,请参考冲突解决。
- Export: 把整个工作拷贝导出到本地目录下,导出的文件将不带svn文件标志,文件及文件夹没有绿色的”√”符号标志。
- Copy URL to clipboard:把某个文件的URL复制到剪贴板。
- Unversion and add to ignore list: 大多数项目会有一些文件(夹)不需要版本控制,如编译产生的*.obj, *.lst,等。每次送交,TortoiseSVN提示那些文件不需要控制,挺烦的。这时候可以把这些文件加入忽略列表。
- Shelve: 如果你在做一个项目A,这个过程中,可能需要修改多个代码文件。不巧的是,项目A还未完成,甚至部分代码都无法编译通过,此时有一个更加重要而且紧急的项目B需要你的参与。那么,你不得不暂时放下项目A工作,来切换到项目B上来,但这时你又发现,项目B与项目A有许多代码耦合,之前项目A上你已经做的修改会影响的项目B。此时,你需要清理你的workspace中关系项目A的临时代码,才能开始项目B的工作。那么shelve功能就是用来管理这些临时改动的代码的。
- Create/Apply Patch: 创建补丁。如果管理员不想让任何人都随便提交修改,而是都要经过审核才能做出修改,那么其他人就可以通过创建补丁的方式,把修改信息(补丁文件)发送给管理员,管理员审核通过之后就可以使用apply patch提交这次修改了。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/hd-yjs/4480.html