SVN – 搭建 SVN 服务器 && 多项目分别建立版本库 && 同步至生产环境

1、安装Subversion

2、找一下安装位置

然后可以稍微看一下帮助

3、创建SVN版本库目录

4、创建版本库

那么在/home/svn/test下面出现了这几个东西

5、接下来进行一些配置

首先让我们看一下conf目录下都是些什么货

然后设置下账号密码

在“[users]”中添加用户名密码,格式:用户名=密码,如下:

设置权限

在文件末尾增加下面的东西:

修改svnserve.conf文件

需要打开其中的几行注释并做好配置,如下

6、启动SVN版本库

7、测试

比如,我就在我本地测试

把SVN中的文件checkout到本地

1

 

 

输入账号密码
2

3

3

然后在本地的SVN文件夹里新建个文件然后commit

5

6

那么,这就算完成了。

END。


 

还没完!

在按照上面做完之后,在服务器上checkout的时候发现了一个小问题

比如在服务器的某个目录下:

之后就会在“wwwsvn”目录下建立名为“111.111.111.111”的目录,目录中是按照上面设置的版本库的文件。而且只能有这一个版本库,没有其他的。

这显然不是我想要的结果,于是又稍微琢磨了一下,目的是为多个项目分别建立版本库。(这里参考了:这个这个这个,呃…还有,这个。其实都大同小异,或许有两个文章的内容都差不多,不过不要在意这些细节。)

那么首先要重复执行建立版本库:

这之后在/home/svn/下就会有project_1、project_2、project_3这三个目录

然后随便进一个、比如进project_1,修改conf里的三个配置文件

然后再去修改另外两个项目的配置文件(如不修改,则可以checkout,但是无法commit,应该是只读不可写。具体哪个配置造成的这个局面,暂没有详细琢磨。)

然后启动版本库

这样之后,/home/svn/目录下的三个版本库就都可以用了。

END。


 

在第一次“END。”之前就在琢磨,比如我是一个web系统,用户在本地commit之后,能否直接更新到web目录中从而不用什么操作直接访问服务器就能看到最新的改动。

那么就涉及到了一些触发同步的东西。

如上面所述,在每一个svn版本库中都有这么几个东西:

其中在hooks/目录下,有一些奇怪的东西:

从这几个货的扩展名来看应该是一些模板示例,那么从网上翻来得知,这里就是用来被触发然后做一些事情的东西。

符合我的需求的,应该是“post-commit”这个,也就是当用户commit到版本库之后便触发这个脚本执行脚本内容,比如把版本库文件更新到指定的目录下。

(那么,照旧,本文仍是网上各种文章的总结性发言,抄袭的来源有:这里这里这里,呃…还有这里。)

那么,假定,网站的域名是:http://abc.com(后面的配置好像和域名并没有什么关系…),网站存放在:/home/www/abc/,需要在本地commit之后、服务器的网站代码直接也随之更改。

自己建立post-commit,或者复制post-commit.tmpl为post-commit,然后把原内容注释掉,先修改下权限:

然后修改内容:

保存退出,然后很重要的一步,在同步的目标目录(也就是/home/www/abc下,首先进行checkout,否则在post-commit的时候会提示跳过[skip]了这个目录),然后在本地commit之后,文件就会自动更新至/home/www/abc中了。

如果需要对其他版本库进行类似的自动更新,则需要修改对应版本库中hooks的post-commit。

但是还有个问题,我这里的web server是用www用户执行的,而自动同步到/home/www/abc中的文件,用户组都是root的,即使手动改为www,然后在本地commit、同步之后,文件还是变为root。此问题待琢磨。(2014-10-30)

凡事都有凑合的方法的,鉴于目前没找到高bigger的解决方案,故在post-commit里直接加了句改用户组的话,如下-,-(2014-10-31)

 

END。

补充:

如果一个目录之前已经在版本库中,但是现在要加入到另一个版本库,那么首先要把这个目录下的SVN信息删掉,其实就是删掉目录下所有名为“.svn”的文件:

再补充:下面这图是我自己看的,外人用不到的。

配置SVN流程

posted @ 2016-05-03 09:54  bass  阅读(452)  评论(0编辑  收藏  举报