文档章节

Apache2+SVN

China_OS
 China_OS
发布于 2014/08/06 15:03
字数 2161
阅读 54
收藏 3
点赞 0
评论 0

       最近需要调研一下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    显示一个目录在某一版本存在的文件






© 著作权归作者所有

共有 人打赏支持
China_OS
粉丝 400
博文 383
码字总数 483581
作品 0
徐汇
技术主管

暂无相关文章

Spring Cloud构建微服务架构—创建“服务注册中心”

创建一个基础的Spring Boot工程,命名为eureka-server,并在pom.xml中引入需要的依赖内容: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par......

itcloud ⋅ 7分钟前 ⋅ 0

拖动

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>event</title> <style> #box { width: 100px; height: 100px; background-color: aquamarine; position: absolute; } </style......

fyliujj ⋅ 10分钟前 ⋅ 0

es6 polyfill array

polyfill之javascript函数的兼容写法——Array篇 1. Array.isArray(obj) if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === '[objec......

球球 ⋅ 12分钟前 ⋅ 0

kibana启动异常

检查一下:kibana.yml 每一对key:value中,冒号之后应有空格。

增删改查1 ⋅ 14分钟前 ⋅ 0

js修改img的src属性刷新图片时的图片缓存问题

问题:上传一张图片,通过js更新src属性刷新图片使其即时显示时, 当img的src当前的url与上次地址无变化时(只更改图片,名称不变,不同图片名称相同)图片不变化(仍显示原来的图片) 但通过...

HaierBrother ⋅ 14分钟前 ⋅ 0

Mysql

1.Jdbc Url 设置allowMultiQueries为true和false mysql的批量更新是要我们主动去设置的, 就是在数据库的连接url上设置一下,加上* &allowMultiQueries=true *即可。 参数名称 参数说明 缺省...

瑟青豆 ⋅ 17分钟前 ⋅ 0

mysql导出导入表结构与数据

当我们需要进行数据迁移时,mysql自带的mysqldump会是最好的方式。 1.导出某张表的结构和数据 首先,我们应当使用服务器,打开终端,连接到所需要导出的表所在的服务器上。执行命令: mysqld...

hengbao5 ⋅ 18分钟前 ⋅ 0

世界杯也走向“比拼”大数据的时代

《日本经济新闻》6月19日报道称,俄罗斯足球世界杯已于6月14日揭开战幕。作为第21次举办的足球世界杯,如何活用大数据有可能成为决定各支球队胜负的重要因素。从对阵球队的分析到战术建议,还...

加米谷大数据 ⋅ 18分钟前 ⋅ 0

金额转为千分制,金额转中文大写

金额转关为大写 js /** 数字金额大写转换(可以处理整数,小数,负数) */ function digitUppercase(n){ if(!n) reutrn "" let fraction = ['角', '分']; let digit = ['零', '壹', '贰', '叁', ...

YXMBetter ⋅ 21分钟前 ⋅ 0

开发利器JRebel部署SpringBoot项目

不要以为年纪轻轻就跌倒了人生谷底,未来还有更大的下降空间等着你。 idea下载和安装JRebel 激活JRebel 访问https://my.jrebel.com/ 使用facebook或twitter登录 勾选 Build project automati...

郑龙飞 ⋅ 26分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部