简介
- SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理
安装
-
查看是否已安装svn
rpm -qa | grep subversion #查看版本 svn --version
-
卸载原svn
yum remove subversion
-
安装新svn
yum -y install subversion
-
创建版本库
svnadmin create 目录
-
扩展 -----文件简介
- conf:配置文件
- authz 文件是权限控制文件
- passwd是帐号密码文件
- svnserve.conf SVN服务配置文件
- db目录:就是所有版本控制的数据存放文件。
- hooks目录:放置hook脚本文件的目录。
- locks目录:用来放置subversion见艰苦锁定数据的目录,用来追踪存取文件库的客户端。
- format文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号
- conf:配置文件
配置
-
svn的配置主要是对conf目录中的配置文件做配置,主要是添加用户和权限配置。
-
添加用户(到passwd用户配置文件中添加用户)
-
配置权限(到auth文件中添加用户权限)
-
解析
joe=username1,username2:username1和username2用户为joe用户组
[/]:表示仓库根目录下
username=rw:表示username这个用户在根目录下有读和写的权限
*=:表示其他用户在根目录下没有任何权限
@joe=r:表示joe组在/think目录下只有读的权限 -
开启配置设置(svnserve.conf文件中做下面修改)
-
关闭svn
killall svnserve
-
启动 svn
svnserve -d -r ./
注意:该命令后要指向所创建的版本库地址 -
检查是否开启服务
ps -ef | grep svnserve
-
扩展:到这步时其实已经是可以使用svn了,但是
使用
-
创建svn
svn co svn://服务器ip
-
开放防火墙3690端口
firewall-cmd --add-port=3690/tcp --permanent firewall-cmd --reload
-
本地电脑检出
-
本地电脑上传
-
服务器svn手动更新
svn update
-
将svn设置开机启动
找个地方写个脚本,svnserve命令最好用绝对路径,可用which svnserve查找,如我的在/usr/bin/svnserve
脚本内容如:
#!/bin/bash
/usr/bin/svnserve -d -r /svn
保存之后加入到开机启动文件那里
- 扩展
自动更新svn
①. 进入hooks脚本目录中
②. 修改post-commit文件//进入hooks脚步目录中 cd hooks //复制post-commit.tmpl为post-commit cp post-commit.tmpl post-commit
将最后三行代码改成下面代码
- export LANG=zh_CN.UTF-8
这句话比较重要,如果客户端跟服务器编码不一样会出现同步失败 - WEB=你的web目录
将要同步过去的web项目路径 - /usr/bin/svn update $WEB
/usr/bin/svn代表你的svn服务文件地址 如果是通过yum安装的话,或者已经注册了svn服务,则可以直接使用svn,不需要输入全路径
③. 设置post-commit文件可以执行权限(若不设置则会出现commit false 255错误)
chmod a+x post-commit (或者chmod 777 post-commit)
错误总结
- 问题: svn: warning: ‘xxxxx’ is already under version control
原因:很可能是 .svn 隐藏目录版本信息被修改了或不对
解决:删除.svn文件,重新检出 - 在Linux下使用SVN的时候,部分文件更新的时候出现了"Node remains in conflict"的错误。文件一直更新不了,即使删除了也无法正常update
解决:svn revert --depth=infinity 文件 svn up 文件