Linux下安装SVN服务端
1、简介
Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说.
首先来下载和搭建SVN服务器。
yum install subversion
2、配置
2.1、创建仓库
我们这里在 /home 下建立一个名为 svn 的仓库(repository),以后所有代码都放在这个下面,创建成功后在svn下面多了几个文件夹。
备注:创建版本库的时候一定要注意自己 的用户角色 是root还是自己 如果不是root 建版本仓库的时候在家目录下也就是/home 目录下,如果在根目录下建就是以root的角色建立的,当我们提交代码的时候就会报错
提示没有权限,出现这种问题的原因在于搭建SVN服务器,包括创建Repository目录/home/svn目录下的一切子目录和文件都是在root用户下进行的,所以在root用户下检出、提交都没有问题。可在Windows PC上从客户端访问就有问题了,因为是只有拥有管理器权限的人才能对Repository目录进行完全控制,而在Windows从客户端访问的话,因为是Users用户组的,对Repository没有修改权限,所以不能提交。而且你更改权限的时候,因为你不是root 所以你也改不了权限
为了避免麻烦 还是建立在home下最稳妥
# cd /home
# mkdir svn
# svnadmin create /home/svn
# ls svn
conf db format hooks locks README.txt
我们这里特别关注一下 conf 文件夹,这个是存放配置文件的
# cd svn/conf
# ls
authz passwd svnserve.conf
其中:
- authz 是权限控制文件
- passwd 是帐号密码文件
- svnserve.conf 是SVN服务配置文件
接下来我们依次修改这3个文件。
2.2、配置passwd
[users]
phper=phper
jser=jser
上面的例子中我们创建了2个用户,一个phper,一个jser
2.3、配置authz
# vi authz
[/]
phper=rw
js=r
*=
2.4、拓展:使用用户分组
这个我一般不用,但是记录下来
还是这个文件:
[groups]
php = phper
js= jser,jser2
[/]
@php= rw
@js= r
* =
上面配置中创建了2个分组,分组1的用户可读可写,分组2的用户只读。
格式说明:
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
3、配置svnserve.conf
打开下面的5个注释
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = /home/svn
注意:
- 最后一行的realm记得改成你的svn目录
- 打开注释时切记前面不要留有空格,否则可能有问题(网上说的,我没有亲测)
4、启动与停止
# svnserve -d -r /home/svn
# killall svnserve
上述启动命令中, -d 表示守护进程, -r 表示在后台执行。停止还可以采用杀死进程的方式:
# ps -ef|grep svnserve
root 4908 1 0 21:32 ? 00:00:00 svnserve -d -r /home/svn
root 4949 4822 0 22:05 pts/0 00:00:00 grep svnserve
# kill -9 4908
5、客户端连接
这里使用TortoiseSVN,输入地址 svn://你的IP 即可,不出意外输入用户名和密码就能连接成功了。
默认端口3690,如果你修改了端口,那么要记得加上端口号。
Linux下SVN客户端使用教程
1、Svn介绍
SVN全名Subversion,即版本控制系统。SVN与CVS一样,是一个跨平台的软件,支持大多数常见的操作系统。作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中央资料档案库(repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本,或是浏览文件的变动历史。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括了程序源码。
2、Svn安装
安装教程:Linux下安装SVN服务端
3、Svn使用
3.1、将文件checkout到本地目录
svn checkout svn_path local_path
svn checkout svn:
svn checkout svn:
svn co
3.2、往版本库添加新的文件
svn add file
svn add test.php
svn add *.php
svn add user
添加完成以后需要提交到版本库。
3.3、将改动的文件提交到版本库
svn commit -m '注释内容' [-N] [--no-unlock] PATH
//简写
svn ci
//提交文件夹及目录
svn ci -m '添加新文件' test.php
svn ci -m '添加新目录(递归)' user
3.4、加锁/解锁
svn lock -m '加锁注释内容' [--force] PATH
svn lock -m "锁定文件" test.php
svn unlock PATH
3.5、更新版本
在修改文件之前,一定要先更新版本库,再修改文件,然后提交。
如果提交的时候提示过期,是因为冲突,需要先update,修改文件,然后清楚 svn resolved ,最后再提交commit。
svn update -r m PATH
svn update
svn -r 200 test.php
svn update test.php
svn up
3.6、查看文件或者目录状态
svn status PATH
svn status -v PATH
svn status
svn status -v
svn st
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
3.7、删除文件
svn delete PATH -m '注释内容'
svn delete svn:
svn delete test.php
svn ci -m '提交删除的文件'
svn (del,remove,rm)
3.8、查看日志
svn log PATH
svn log
svn log test.php
3.9、查看文件详细信息
svn info PATH
svn info
svn info test.php
3.10、比较文件及目录差异
svn diff PATH
svn diff test.php
svn diff -r m:n PATH
svn diff -r 200:201 test.php
3.11、将两个版本之间的差异合并到当前文件
svn merge -r m:n path
svn merge -r 200:201 test.php
3.12、SVN 帮助
svn help
svn help ci
3.13、在版本仓库中添加文件夹
svn mkdir PATH
mkdir work
svn add work -m '添加文件夹'
3.14、代码库URL变更
svn switch (sw): 更新工作副本至不同的URL。
用法:
1、switch URL [PATH]
2、switch –relocate FROM TO [PATH...]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
3.15、解决冲突
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。
在linux服务器上装svn版本管理,自动部署代码到项目
http://bbs.aliyun.com/read/9715.html?spm=5176.7114037.1996646101.1.W3zw3X&pos=1
http://v5sheji.com/archives/setupsvnonlinux.html
1.安装svn服务器端
从镜像下载安装svn服务器端
中间会提示是否ok,输入y,确认
安装成功提示:.....complete!
依次执行如下命令:
cd /usr/local/ //进入目录,准备创建svn目录
mkdir svnRepo //创建一个svn目录
chmod -R 777 svnRepo //修改目录权限为777
svnadmin create /usr/local/svnRepo/first //创建一个svn版本仓库first(first可以随便起名字)
cd first/conf //进入first版本仓库下的配置文件目录
2.下面要修改这个目录下的三个配置文件
(1) svnserve.conf //配置版本库信息和用户文件和用户密码文件的路径、版本库路径
anon-access = none //默认是只读read
auth-access = write //认证后有写入权限
password-db = passwd //帐号密码配置文件
authz-db = authz //权限配置文件
realm = first //改成自己的版本库 生效范围
(2) authz //文件,创建svn组和组用户的权限
[group]
first = ddl,shl //创建一个first的组,并制定两个用户ddl和shl
[/] //制定根目录下的权限
@first = rw //first组用户权限为读写
* = r //其他用户只有读权限
(3) passwd //创建或修改用户密码
[users]
ddl = 123456 //用户名 = 密码
shl = 123456 //。。。
3.然后要设置自启动
打开自启动文件 /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
添加下面一行
svnserve -d -r /usr/local/svnRepo/first
svn命令:
lsof -i :3690 查看svn是否启动
ps aux |grep 'svn' 查找所有svn启动的进程
kill -9 2505 杀死2505这个查找到的svn进程
svnserve -d -r /usr/local/svnRepo/first 启动svn(可以把这个放到/etc/local/rc.local文件中,实现开机自启动)
netstat -anp|grep svnserve
查看一下SVN信息
SVN版本库起动方式,现在svnRepo下面有 first、test 两个版本库
1:单版本库起动 svnserve -d -r /usr/local/svnRepo/first
2:多版本库起动 svnserve -d -r /usr/local/svnRepo
区别在于起动svn时候的命令中的启动参数-r指定的目录。
4.限制不同的用户对不同的版本库操作权限
修改版本库中的conf目录下的 authz文件
以配置 first 版本库为例:
authz
[groups]
company = user1,user2
[first:/] //指定版本库跟目录下的权限
@company = rw //company组用户权限为读写
* = r //其他用户只有读权限
passwd 设置组中用户的账号和密码
[users]
user1 = 123456
user2 = 123456
5.客户端访问
假设客户端使用tortoiseSVN
打开资源库浏览器输入地址, svn://你的svn服务器ip:3690
输入用户名ddl 密码12345
因为没有网资源库里放文件所以需要你用客户端右键【create forder】,然后【add forder】
6.使用post-commit实现自动部署
搭建svn都不是仅仅为了把代码存到仓库,而是同步部署到对应的项目。
在 svn 目录的 /hooks
里面有一堆tmpl,这些tmpl可以做很多事情,不过今天我们就说一下自动部署post-commit.tmpl
。
tmpl文件是模版文件,我们要用post-commit需要手动复制对应tmpl里面的内容到新的post-commit里面
cp post-commit.tmpl post-commit
step.1:
然后打开文件清空内容,修改为以下代码:
#!/bin/sh
export LANG=zh_CN.UTF-8
/usr/bin/svn update --username **** --password **** /var/www/test
其中第一行意思是:用sh来解析这个脚本,因为各种shell的语法有细微的差别
第二行是编码格式:这里我使用的是UTF-8
最后一行/usr/bin/svn
是svn的路径,不是项目路径,应该都是一样的,后半句分别是用户名、密码、和项目路径。--username
这个比较坑了,网上搜出来的很多都搞错了,前面其实是两个减号,英文输入法下的。
step.2:
修改post-commit的可执行权限
step.3:
在服务器进入项目目录/var/www/test
checkout 整个项目。
注意此处不要checkout文件夹,正确代码应该是这样:
svn checkout svn://您的服务器地址:{端口号}/test . //注意目录后面还有一个点
注意:此处的/test 可不需要添加:( 添加的目的是为了实现多个项目。 )
svn checkout svn://您的服务器地址:3690 . //注意目录后面还有一个点
至此,如果按照此步骤搞下来,应该已经没有问题了,你可以本地commit代码,自动同步到项目了。
6.常见错误,我遇到的
- 255错误:post-commit没有给执行权限 或者 头部没有执行用sh执行,就是没有
#!/bin/sh
- 提示跳过目录:服务器目录没有checkout代码,记得一定要先checkout一次,才能同步(!,每次新建项目都需要)
- 什么提示也没有:这种情况出现在用工具commit的时候,成功了,但是就是没有同步,建议你到linux下,使用
./post-commit
手动执行看报什么错误。如果乱码,请将文件内编码格式修改为GBK
- 提示**** is a direcitory:
/usr/bin/svn
你把这个搞错了,他不是一个目录,是svn的路径