0x00 开始
通过yum直接安装subversion
1
yum install subversion
创建版本库。版本库是一个svn用来进行版本管理的控制中心,我们将/home/svn作为我们管理所有版本库的目录,然后在其中创建一个project的版本库。
1
2mkdir /home/svn
svnadmin create /home/svn/project修改版本库配置。
1
2cd /home/svn/project && ls
conf db format hooks locks README.txt创建完毕的版本库中存在conf,hooks,locks等目录和文件。
1
2cd conf/ && ls
authz passwd svnserve.conf进入conf目录我们能看到3个配置文件:authz,passwd,svnserve.conf。authz是svn用户的权限配置文件,passwd是svn用户密码的配置文件,svnserve.conf是版本库的主配置文件。
1
vi passwd
我们先修改passwd,在文件末尾添加一行表示添加一个用户。
1
2[users]
sidfate = sidfate然后修改authz,在文件末尾添加我们刚刚创建的svn用户对根目录的权限设置,这里我们设置为rw(读写),这里的根目录指的是版本库的根目录。
1
2[/]
sidfate = rw最后修改svnserve.conf,去除下面配置前的注释。
1
2
3
4anon-access = read
auth-access = write
password-db = passwd
authz-db = authz这里说明一下,网上的资料有的说讲
realm = My First Repository
这一行也去注释,实际测试没有必要,还有如果你在客户端尝试checkout时出现权限验证的错误可以将authz-db = authz
这一行注释回去就可以了。启动和关闭svn服务。
1
svnserve –d –r /home/svn/project/
-d指明以守护模式运行,-r指定根目录,还可以使用–listen-port=切换监听端口,默认端口为3690。关闭svn服务可以使用以下命令。
1
2
3
4ps -ef | grep svnserve
root 1452 871 0 15:44 pts/0 00:00:00 grep svnserve
root 29508 1 0 Jan20 ? 00:00:00 svnserve -d -r /home/svn/project/
kill 29508本地与服务器数据同步。我们现在可以在客户端环境checkout到本地,windows环境下可以使用第三方工具TortoiseSVN,操作很方便,如果是linux客户端,我们可以使用checkout命令。
1
$ svn checkout svn://myurl/project
这里有一个误区,没有接触过版本控制的人可能尝试了在本地添加一个文件并上传,然后发现在服务器上找不到上传的文件。实际上版本控制记录了你的提交,你可以在本地的另一处checkout该项目发现你上传的文件已经存在了。在服务器上其实也是同一个道理,你在服务器上同样需要checkout一份代码,我们之前所作的其实就是创建了一个文件控制的中枢,你提交文件到svn服务器,然后在你的服务器上更新代码。也许你会觉得这个步骤繁琐了,别担心,我们可以使用svn的post-commit来自动同步代码的更新,来达到你本地的代码提交后服务器上的代码同步更新的功能。
1
2
3cd /home/svn/project/hooks
cp post-commit.tmpl post-commit
vi post-commit找到你版本库的hooks目录,拷贝post-commit.tmpl为post-commit,然后编辑该文件,添加以下内容。
1
2
3REPOS="$1"
REV="$2"
cd /home/wwwroot/project/ && /usr/bin/svn update --username sidfate --password sidfate注意第三条语句,/home/wwwroot/project/就是我放在服务器上的代码目录,这里的操作就是每次有svn提交后进入该目录然后更新代码。还要注意的是,请给予post-commit足够的权限,不然提交的时候会提示该文件出错。
1
chmod 770 post-commit
仍然需要注意的一个问题是如果你的svn目录中存在中文命名的文件,那么可能会出现以下类似的错误:
1
svn: Error converting entry in directory '.' to UTF-8
这个时候你需要在之前编写的post-commit文件里的命令前加上一段设置编码。
1
export LANG=en_US.UTF-8 && cd /home/wwwroot/project/ && /usr/bin/svn update --username sidfate --password sidfate