1、

导入      客户端

---------->   ----------------->

代码库    SVN库      本地

<----------   <-----------------

post-commit同步    commit提交

sudo apt-get install apache2 subversion libapache2-svn

(centos下安装:

yum -y install httpd subversion

yum -y install mod_dav_svn)

sudo mkdir /home/svn/myproject

sudo svnadmin create /home/svn/myproject

sudo vim /home/svn/myproject/conf/svnserve.conf

  1. anon-access = read //允许匿名登录

  2. auth-access = write

  3. password-db = passwd

去掉前面的#,不要有空格

sudo svnserve -d -r /home/svn //启动svn服务

xp客户端验证:svn://192.168.10.67/myproject

2、

如果将/home/svn/myproject/conf/svnserve.conf 文件中

anon-access = read 修改为

anon-access = none

则需要用户名密码才能登录

添加用户名密码

sudo vim /home/svn/myproject/conf/passwd

user01 = user01

xp客户端验证:svn://192.168.10.67/myproject

输入用户名密码即可

3、

如果将/home/svn/myproject/conf/svnserve.conf 文件中

# authz-db = authz 修改为

authz-db = authz

则在passwd中添加用户名密码后,还要在authz文件中添加权限

sudo vim /home/svn/myproject/conf/authz

[groups]

admin = user01,user02 //admin是组名,随便起

[myproject:/] //权限控制的目录

@admin = rw //权限

4、

假如我们的文档或者代码或者其他数据放在/home/myproject文件夹中,

cd /home/myroject

sudo mkdir user01

cd user01 && touch 1111

cd /home/myroject

sudo mkdir user02

cd user02 && touch 2222

然后将这么目录导入到刚才建立的SVN库中

sudo svn import -m "first import" /home/myproject file:///home/svn/myproject

xp客户端验证:svn://192.168.10.67/myproject

可以看到user01 user02两个文件夹及文件夹里面的数据


5、修改user01的权限,不让他看到user02的文件夹

sudo vim /home/svn/myproject/conf/authz

[groups]

admin = user01

develop = user02

[myproject:/]

@admin = rw


[myproject:/user02]

@admin =


xp客户端验证:svn://192.168.10.67/myproject

此时只能看到user01 一个文件夹及文件夹里面的数据,而无法看到user02的文件夹及数据

6、客户端提交并同步

在本地的xp测试机新建文件夹-user04 然后svn commit 提交的服务器端;

在服务器端也可以在authz中设置进行目录权限控制。

svn的服务器上是看不到你上传的东西的,而是提交一次svn会自动生成一个版本文件,这个文件

是经过处理的,同样也看不到原文件。

7、svn钩子配置

为了保证/home/myroject文件夹下和SVN库中的数据同步,做一下配置

ls -l /home/svn/myproject/hooks


start-commit 提交前触发事务

pre-commit 提交完成前触发事务

post-commit 提交完成时触发事务

pre-revprop-change 版本属性修改前触发事务

post-revprop-change 版本属性修改后触发事务

通过上面这些名称编写的脚本就就可以实现多种功能了,相当强大

第一步:手工创建post-commit

sudo vim post-commit


  1. #!/bin/sh

  2. #export LANG = en_US.UTF-8

  3. export LC_ALL=en_US.UTF-8 //这个俩个不一定哪个好使- -

  4. sudo svn update /home/web/app/ --username admin --password admin --force --no-auth-cache


第二步:将SVN库中代码导出到代码目录即可。

svn update /home/web/app/ --username admin --password admin --force --no-auth-cache

---------------------

我在客户端测试,还是有报错,错误如图:


ubuntu下安装svn 服务器_ubuntu

应该还是没有权限,但在服务器上执行:

sudo svn update /home/myroject/ --username admin --password admin --force --no-auth-cache是正常的

于是对post-commit做了修改:

  1. echo "123456" | sudo -S svn update /home/myroject/ --username admin --password admin --force --no-auth-cache

其中“123456”为服务器密码,让自动输入服务器密码,这次客户端测试正常。但总感觉还是哪儿有点问题~~

svn服务器apache (该种方法还没有应用和测试)

现在我们使用apache作为svn服务器,apache支持http协议通信,配置也比较简单,主要是权限配置。

首先安装好apache。然后进去/etc/apache2/conf,修改apache2.conf,在下面加入

<Location "/myrepos">

DAV svn

SVNPath /home/myrepos

AuthType Basic

AuthName "Your repository name"

AuthUserFile /etc/subversion/passwd

<LimitExcept GET PROPFIND OPTIONS REPORT>

Require valid-user

</LimitExcept>

</Location>

其中/etc/subversion/passwd这个文件中保存的是用户信息,这个文件需要我们新建。

然后添加一个用户

$ sudo htpasswd /etc/subversion/passwd tester

你需要把 repo 所在的目录和文件的所有权都改成系统中操作 Apache 的用户,这样在 commit 的时候才会被 Apache 认可。在 Ubuntu 中,这个用户叫 www-data

$ sudo chown -R www-data /home/myrepos

然后我们重启apache

$ sudo /etc/init.d/apache2 restart

最后我们测试一下,在浏览器里输入http://localhost/myrepos/

看见了工程目录就成功了。

在局域网中,也可以访问。

$ svn checkout http:// #svn服务器ip# /myrepos

#版本控制

=================================

1、报错:invalid authz configuration

authz配置文件有问题——

我出现问题原因:删除某个目录后,authz配置文件没有删除;删除某个定义的组后,权限分配中没有删除这个组。

解决:在authz配置文件中删除无效的、不存在的目录;彻底清除已删除的组。

+++++++++++++++++++++++++++++++++++++

1、Linux服务器上添加文件

A、直接在代码库中添加文件:touch 111.txt

B、将文件添加到版本库:svn add 111.txt

C、将改动的文件提交到版本库:svn commit -m "add 111 file to test" --no-unlock 111.txt

D、客户端下载或者更新查验。

============

mkdir -p /home/svn/myproject

svnadmin create /home/svn/myproject/aixue

svnserve -d -r /home/svn

客户端验证则输入:svn://192.168.10.107/myproject/aixue

=============

删除“.svn”的目录

find / -type d -name ".svn" | xargs rm -rf

find . -name .svn -type d -exec rm -fr {} \;


-iname 同-name区别: -i 忽略大小写