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
anon-access = read //允许匿名登录
auth-access = write
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
#!/bin/sh
#export LANG = en_US.UTF-8
export LC_ALL=en_US.UTF-8 //这个俩个不一定哪个好使- -
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
---------------------
我在客户端测试,还是有报错,错误如图:
应该还是没有权限,但在服务器上执行:
sudo svn update /home/myroject/ --username admin --password admin --force --no-auth-cache是正常的
于是对post-commit做了修改:
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 忽略大小写