Apache2+SVN

       最近需要调研一下svn怎么和我们已有的软件进行集成,必须先得有个svn环境实验一下,google一看好多部署文档,大部分都是源码安装apr、apache、subversion,对于我这种懒汉能用包管理器解决的绝对不去源码编译,所以我们就用懒办法来。

部署环境:ubuntu14.04

安装apache2和subversion,因为要通过http协议来访问版本库,所以需要apache的mod_svn模块

apt-get install apache2 libapache2-mod-svn subversion

查看安装好的svnserve的版本号

svnserve --version
    ubuntu14.04的svnserver的版本号是1.8.8 假设我们的svn版本仓库在/opt/svn目录下,我们建立两个仓库test1,test2

svnadmin create /opt/svn/test1
svnadmin create /opt/svn/test2
修改apache2的配置文件

<VirtualHost 192.168.1.100:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /opt/svn/
    <Location /opt/svn/>
        DAV  svn
	#svn仓库的根目录
        SVNParentPath /opt/svn/
        SVNListParentPath on
	#svn的验证文件
        AuthzSVNAccessFile /opt/svn/authz
	#采用那种验证类型
        AuthType Basic
	#验证提示语
        AuthName "Subversion repository"
	#svn验证文件,里面是用户名和密码
        AuthUserFile /opt/svn/passwd
	#告诉apache只有在验证文件中的用户才可以访问
        Require valid-user
    </Location>
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
我们看看版本库test1的目录结构

test1
├── conf
├── db
├── format
├── hooks
├── locks
└── README.txt
    conf里面是版本库的配置文件,hooks里面是一些脚本,用户提交程序到svn,svn触发hooks,不同的行为按照不同的hooks处理, 你可以根据自己的需求做调整,hooks脚本主要用到以下几个:

start-commit 提交前触发事务
pre-commit 提交完成前触发事务
post-commit 提交完成时触发事务
pre-revprop-change 版本属性修改前触发事务
post-revprop-change 版本属性修改后触发事务

我们来配置版本库test1,在/opt/svn/test1/conf/svnserve.conf

[general]
anon-access = none
auth-access = write
password-db = ../passwd
authz-db = ../authz
    可以看到我定义了两个文件,authz和passwd,它们都在/opt/svn的顶级目录下

svn
├── authz
├── passwd
├── test1
└── test2
    authz中对用户可以访问的版本库做权限管控,passwd则是记录用户名和密码,authz的配置如下:

[groups]
dba = guol
dbb = xu

[test1:/]
guol = rw
xu = r

[test2:/]
guol = rw

    groups设置群组,dba群组有guol,dbb群组有xu。[test1:/]表示版本库test1的访问权限,guol=rw表示guol有读写权限,xu=r表示xu有读权限。如果要给整个组赋权,则可以使用@dba=rw这种格式。

创建svn用户guol和xu

htpasswd -c /opt/svn/passwd guol
htpasswd    /opt/svn/passwd xu
因为通过http访问svn,所以需要apache对仓库有操作权限

chown www-data.www-data /opt/svn -R
重启apache服务,通过http访问svn版本库


如果你不想通过http来访问版本库,也可以通过svn协议来访问版本库,首先需要启动svn版本库

svn -d -r /opt/svn
    -d表示以daemon后台方式运行,-r指定仓库的根目录

    可以通过 svn://192.168.1.100/test1来访问test1版本库,不用指定版本库的全路径。


部署完了,了解一些svn的知识

    subversion使用URL识别subversion版本库中的版本资源,URL使用标准语法,允许以域名和端口作为URL的一部分。

    访问网络服务:svn checkout  http://s vn.xxx.cn:8080/repo

    访问本地版本库:svn checkout file:///repo  或者 svn checkout file://localhost/repo

    subversion支持以下几种访问方式:

file:///    直接访问本地磁盘
http://    通过apache的webdav协议访问
https://    通过SSL访问
svn://    通过svnserver服务自定义的协议访问
svn+ssh://    通过ssh封装的svn来访问

    一个工作拷贝是本地机器上的一个普通目录,保存着一些文件。而工作副本也包含一些由subversion创建并维护的额外文件,用来协助执行命令,通常工作副本的每个文件夹都有一个.svn命名的文件夹,被叫做副本的管理目录。

    你在自己的工作拷贝中修改文件后,如果需要将你的修改发布给别人,则可以使用  svn commit  file -m "xxx",这样你对file的修改已经提交到版本库。其他人这时候可以更新他们的代码,svn update。你不必指定update需要更新的文件,subversion利用.svn文件夹中的信息确认需要更新哪些文件。如果你不小心删除了.svn目录,不要担心,使用普通命令删除包含的目录,然后使用svn update命令,svn客户端会重新下载你删除掉的目录

    每当版本库接受了一个提交,文件系统进入了一个新的状态,叫做一次修订(revision),每一个修订都被赋予一个独一无二的自然数,一个比一个大,初始号是0.。ubversion的修订号是针对整个目录树的,而不是单个文件。

    svn status命令可以查看工作拷贝中文件的状态

导入数据到版本库
svn add
svn import    将伪版本化的文件导入版本库的最快方法,import不需要工作拷贝,你的文件会直接提交到版本库中。例如:直接将myrepo目录加入test版本库
            svnadmin create /usr/local/repo/test   
            svn import myrepo file:///usr/local/repo/test/
            svn list file:///user/local/repo/test/
初始化检出
svn checkout  http:// usr/local/repo/test
    注意:你的工作拷贝同你本地文件系统上的文件盒目录没有任何区别,你可以随意修改文件,但是必须让subversion知道。所以你移动或者拷贝文件,应该使用svn copy或者svn move命令,而不是系统自带命令
在chekout时指定你的工作目录名称,把工作拷贝test放到guol目录里面
    svn checkout  http://usr/local/repo/test  guol
禁用密码缓存
    当你执行subversion命令需要认证时,缺省情况下subversion会在磁盘缓存认证信息,这样在接下来的操作中就不必输入密码,如果你很在乎密码,你可以永久关闭密码缓存,或者在某一次执行时关闭密码缓存
    在某次执行时关闭密码缓存使用--no-auth-cache选项,永久关闭密码缓存则在配置文件中使用store-passwords=no配置项

一般的工作流像下面这样

1    更新工作拷贝    svn update    得到其他人这段时间的修改,让你的工作拷贝与最新版同步
2    做出修改    svn add  test    将预定的test文件或者目录添加到版本库,当你下次提交后,test会成为其父目录下的一个子对象,如果test是目录,其下面的内容也会被添加进去,如果只想添加test目录,而不添加内容,则使用-N参数     
               svn delete  test    将预定的test文件或者目录从版本库中删除,如果是文件,则立刻从工作目录中删除,如果是目录,则不会立即删除,但是当你提交你的修改的时候,会在你的工作目录和版本库中删除
               svn copy  test  test2    建立一个新的项目test2为test的复制品。下次提交时会将test2添加到版本库中
               svn move test test2    这个与执行svn copy test test2,svn delete test相同
               svn mkdir test    这个与运行mkdir test,svn add test相同
        如果你只是修改版本库中已经存在的文件,在你提交之前,不必使用上面的任何一个命令。你可以对工作拷贝做出两种修改:文件修改和目录修改
3    检查修改    svn status    浏览所做的修改
                svn diff    检查修改的详细信息
4    取消一些修改    svn revert  test    取消对test文件的修改,包括误删除一个文件,也可以通过revert来恢复
5    解决冲突    svn update   当运行update时,如果提示符为C,表示你和服务器上的改动冲突了,需要手动解决冲突,
                svn resolved file    冲突解决后需要运行resolved让subversion知道。
6    提交修改    svn commit    发送所有的修改到版本库,-m选项可以输入一些修改的信息
检验历史
svn log    展示给你主要信息,每个版本附加在版本上的作者与日期信息和修改路径
svn diff    显示特定修改的行级信息
svn cat    取得某一版本的某个文件在当前屏幕显示
svn list    显示一个目录在某一版本存在的文件






转载于:https://my.oschina.net/guol/blog/298555

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值