热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第6章Subversion

目录6.1.InvokingtheServer6.1.1.Installing6.1.1.1.Ubuntu6.1.1.2.CentOS56.1.1.2.1.classicUnix-

目录

6.1. Invoking the Server
6.1.1. Installing
6.1.1.1. Ubuntu6.1.1.2. CentOS 5
6.1.1.2.1. classic Unix-like xinetd daemon6.1.1.2.2. WebDav6.1.1.2.3. 项目目录结构
6.1.1.3. CentOS 6
6.1.2. standalone “daemon” process
6.1.2.1. starting subversion for debian/ubuntu6.1.2.2. starting subversion daemon script for CentOS/Radhat
6.1.3. classic Unix-like inetd daemon6.1.4. hooks
6.1.4.1. post-commit
6.1.5. WebDav
6.1.5.1. davfs2 - mount a WebDAV resource as a regular file system
6.2. repository 管理
6.2.1. create repository6.2.2. user admin6.2.3. authz6.2.4. dump
6.3. 使用Subversion
6.3.1. Initialized empty subversion repository for project6.3.2. ignore6.3.3. 关键字替换6.3.4. lock 加锁/ unlock 解锁6.3.5. import6.3.6. export 指定版本6.3.7. 修订版本关键字6.3.8. 恢复旧版本
6.4. branch
6.4.1. create6.4.2. remove6.4.3. switch6.4.4. merge6.4.5. relocate
6.5. FAQ
6.5.1. 递归添加文件6.5.2. 清除项目里的所有.svn目录6.5.3. color diff6.5.4. cvs2svn6.5.5. Macromedia Dreamweaver MX 2004 + WebDAV +Subversion6.5.6. 指定用户名与密码

6.1. Invoking the Server

配置开发环境版本控制Subversion

Squid + Subversion 请参考Squid一节

6.1.1. Installing

6.1.1.1. Ubuntu

过程 6.1. subversion

  1. installation

    $ sudo apt-get install subversion

    $ sudo apt-get install subversion

  2. create svn group and svnroot user

    $ sudo groupadd svn
    $ sudo adduser svnroot --ingroup svn

  3. create repository

    $ svnadmin create /home/svnroot/test

  4. testing

    svnroot@netkiller:~$ svnserve -d --foreground -r /home/svnroot/

    check out

    neo@netkiller:/tmp$ svn list svn://localhost/test

    you may see some file and directory

    neo@netkiller:/tmp$ ls test/.svn/
    entries format prop-base props text-base tmp

  5. configure

    $ vim repositories/conf/svnserve.conf

    [general]
    anon-access = read
    auth-access = write
    password-db = passwd
    # authz-db = authz
    # realm = My First Repository

    $ vim repositories/conf/passwd

    [users]
    # harry = harryssecret
    # sally = sallyssecret
    neo = chen

    如果不允许匿名用户checkout代码,配置文件这样写anon-access = none

    [general]
    anon-access = none
    auth-access = write

  6. firewall

    $ sudo ufw allow svn

6.1.1.2. CentOS 5


[root@development ~]# yum -y install subversion

6.1.1.2.1. classic Unix-like xinetd daemon


[root@development ~]# vim /etc/xinetd.d/subversion
service subversion
{disable = noport = 3690socket_type = streamprotocol = tcpwait = nouser = svnrootserver = /usr/bin/svnserveserver_args = -i -r /home/svnroot
}

firewall


iptables -A INPUT -p tcp -m tcp --sport 3690 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 3690 -j ACCEPT

6.1.1.2.2. WebDav

install webdav module


[root@development ~]# yum install mod_dav_svn

create directory


mkdir /var/www/repository
svnadmin create /var/www/repository

subversion.conf


[root@development ~]# vim /etc/httpd/conf.d/subversion.conf
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

vhost.conf



DAV svn
SVNPath /var/www/repository
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/subversion/svn-auth-file
Require valid-user

auth file


[root@development ~]# htpasswd -c /etc/subversion/svn-auth-file my_user_name

6.1.1.2.3. 项目目录结构

–trunk #存放主线

–branches #存放分支,可修改

–tags #存放标记,不可修改

6.1.1.3. CentOS 6

CentOS 6 默认没有安装xinetd

# yum install xinetd
# yum install subversion# mkdir -p /opt/svnroot

xinetd 配置

# vim /etc/xinetd.d/svn
service svn
{disable = noport = 3690socket_type = streamprotocol = tcpwait = nouser = svnrootserver = /usr/bin/svnserveserver_args = -i -r /opt/svnroot
}# /etc/init.d/xinetd restart
Stopping xinetd: [FAILED]
Starting xinetd: [ OK ]# tail /var/log/messages | grep xinetd
May 5 18:57:20 SZVM42-C1-02 yum: Installed: 2:xinetd-2.3.14-16.el5.i386
May 5 18:59:22 SZVM42-C1-02 xinetd[4558]: Unknown user: svnroot [file=/etc/xinetd.d/svn] [line=8]
May 5 18:59:22 SZVM42-C1-02 xinetd[4558]: Error parsing attribute user - DISABLING SERVICE[file=/etc/xinetd.d/svn] [line=8]
May 5 18:59:22 SZVM42-C1-02 xinetd[4558]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networkingoptions compiled in.
May 5 18:59:22 SZVM42-C1-02 xinetd[4558]: Started working: 0 available services

service 名字必须与 /etc/services中定义的名字相同,否则将不能启动,同时在/var/log/message中会提示如下

May 4 14:33:08 www xinetd[5656]: service/protocol combination not in /etc/services: subversion/tcp
May 4 14:33:08 www xinetd[5656]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networking options compiled in.
May 4 14:33:08 www xinetd[5656]: Started working: 0 available services
May 4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.
May 4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.
May 4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.
May 4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.
May 4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.
May 4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.
May 4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.
May 4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.
May 4 14:33:41 www xinetd[5656]: Exiting...
May 4 14:33:41 www xinetd[5676]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networking options compiled in.
May 4 14:33:41 www xinetd[5676]: Started working: 1 available service

6.1.2. standalone “daemon” process

svn daemon

$ svnserve --daemon --root /home/svnroot

6.1.2.1. starting subversion for debian/ubuntu

/etc/init.d/subversion for debian/ubuntu


debian:/etc/init.d# cat subversion
#!/bin/sh
### BEGIN INIT INFO
# Provides: subversion
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Should-Start: fam
# Should-Stop: fam
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start the subversion subversion server.
### END INIT INFO#########################
# Author: Neo
#########################PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/svnserve
NAME=subversion
DESC="subversion server"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
SVNROOT=/srv/svnroot
DAEMON_OPTS="-d -T -r $SVNROOT --pid-file $PIDFILE"test -x $DAEMON || exit 0set -e. /lib/lsb/init-functionscase "$1" instart)log_daemon_msg "Starting $DESC" $NAMEecho$DAEMON $DAEMON_OPTSecho `pgrep -o $NAME` > $PIDFILE > /dev/null 2> /dev/null;;stop)log_daemon_msg "Stopping $DESC" $NAMEechokillall `basename $DAEMON` > /dev/null 2> /dev/nullrm -rf $PIDFILE;;restart)$0 stop$0 start;;status)ps ax | grep $NAME;;*)echo "Usage: $SCRIPTNAME {start|stop|restart|status}" >&2exit 1;;
esacexit 0

6.1.2.2. starting subversion daemon script for CentOS/Radhat


#!/bin/bash
#
# /etc/rc.d/init.d/subversion
#
# Starts the Subversion Daemon
#
# chkconfig: 345 90 10
#
# description: Subversion Daemon# processname: svnservesource /etc/rc.d/init.d/functions[ -x /usr/bin/svnserve ] || exit 1### Default variables
SYSCONFIG="/etc/sysconfig/subversion"### Read configuration
[ -r "$SYSCONFIG" ] && source "$SYSCONFIG"RETVAL=0
USER="svnroot"
prog="svnserve"
desc="Subversion Daemon"start() {echo -n $"Starting $desc ($prog): "daemon --user $USER $prog -d $OPTIONSRETVAL=$?[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$progecho
}stop() {echo -n $"Shutting down $desc ($prog): "killproc $progRETVAL=$?[ $RETVAL -eq 0 ] && success || failureecho[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$progreturn $RETVAL
}case "$1" instart)start;;stop)stop;;restart)stopstartRETVAL=$?;;condrestart)[ -e /var/lock/subsys/$prog ] && restartRETVAL=$?;;*)echo $"Usage: $0 {start|stop|restart|condrestart}"RETVAL=1
esacexit $RETVAL

/etc/sysconfig/subversion

# Configuration file for the Subversion service#
# To pass additional options (for instace, -r root of directory to server) to
# the svnserve binary at startup, set OPTIONS here.
#
#OPTIONS=
OPTIONS="--threads --root /srv/svnroot"

6.1.3. classic Unix-like inetd daemon

/etc/inetd.conf

svn stream tcp nowait svn /usr/bin/svnserve svnserve -i -r /home/svnroot/repositories

xinetd.d

/etc/xinetd.d/subversion

$ sudo apt-get install xinetd
$ sudo vim /etc/xinetd.d/subversionservice subversion
{disable = noport = 3690socket_type = streamprotocol = tcpwait = nouser = svnrootserver = /usr/bin/svnserveserver_args = -i -r /home/svnroot
}

restart xinetd

$ sudo /etc/init.d/xinetd restart

6.1.4. hooks

$ sudo apt-get install subversion-tools

6.1.4.1. post-commit

install SVN::Notify

perl -MCPAN -e 'install SVN::Notify'


$ sudo cp post-commit.tmpl post-commit
$ sudo chown svnroot:svn post-commit
$ sudo vim post-commitREPOS="$1"
REV="$2"#/usr/share/subversion/hook-scripts/commit-email.pl "$REPOS" "$REV" openunix@163.com
/usr/share/subversion/hook-scripts/commit-email.pl "$1" "$2" --from neo@netkiller.8800.org -h localhost -s "[SVN]" --diff y openunix@163.com openx@163.com

另一种方法


#!/bin/shREPOS="$1"
REV="$2"/usr/local/bin/svnnotify \--repos-path "$REPOS" \--revision "$REV" \--subject-cx \--with-diff \--handler HTML::ColorDiff \--to \--from

/usr/bin/svnnotify --repos-path "$REPOS" --revision "$REV" \
--from neo@netkiller.8800.org --to openunix@163.com --smtp localhost \
--handler "HTML::ColorDiff" --with-diff --charset zh_CN:GB2312 -g zh_CN --svnlook /usr/bin/svnlook --subject-prefix '[SVN]'

如果你没有安装邮件服务器,你可以使用服务商的SMTP如163.com

/usr/bin/svnnotify --repos-path "$REPOS" --revision "$REV" \
--from openx@163.com --to openunix@163.com --smtp smtp.163.com --smtp-user openunix --smtp-pass ****** \
--handler "HTML::ColorDiff" --with-diff --charset UTF-8 --language zh_CN --svnlook /usr/bin/svnlook --subject-prefix '[SVN]'

Charset

REPOS="$1"
REV="$2"svnnotify --repos-path "$REPOS" --revision "$REV" \--subject-cx \--from neo.chen@example.com \--to group@example.com,manager@example.com \--with-diff \--svnlook /usr/bin/svnlook \--subject-prefix '[SVN]' \--charset UTF-8 --language zh_CN

6.1.5. WebDav

Apache SVN

$ sudo apt-get install libapache2-svn

netkiller@neo:/etc/apache2$ sudo apt-get install libapache2-svn

vhost


ServerName svn.netkiller.8800.orgDocumentRoot /var/svnDAV svnSVNPath /var/svnAuthType BasicAuthName "Subversion Repository"AuthUserFile /etc/apache2/svn.passwdRequire valid-user

建立密码文件

建立第一个用户需要加-c参数

netkiller@neo:/etc/apache2$ sudo htpasswd2 -c /etc/apache2/svn.passwd svn
New password:
Re-type new password:
Adding password for user svn

输入两次密码

建立其他用户

sudo htpasswd2 /etc/apache2/svn.passwd otheruser

6.1.5.1. davfs2 - mount a WebDAV resource as a regular file system

install

$ sudo apt-get install davfs2

mount a webdav to directory

$ sudo mount.davfs https://opensvn.csie.org/netkiller /mnt/davfs/
Please enter the username to authenticate with server
https://opensvn.csie.org/netkiller or hit enter for none.
Username: svn
Please enter the password to authenticate user svn with server
https://opensvn.csie.org/netkiller or hit enter for none.
Password:
mount.davfs: the server certificate is not trustedissuer: CSIE.org, CSIE.org, Taipei, Taiwan, TWsubject: CSIE.org, CSIE.org, Taipei, TWidentity: *.csie.orgfingerprint: e6:05:eb:fb:69:5d:25:4e:11:3c:83:e8:7c:44:ee:bf:a9:85:a3:64
You only should accept this certificate, if you can
verify the fingerprint! The server might be faked
or there might be a man-in-the-middle-attack.
Accept certificate for this session? [y,N] y

test

$ ls davfs/
branches lost+found tags trunk





原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。



推荐阅读
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文详细解析了 Python 2.x 版本中 `urllib` 模块的核心功能与应用实例,重点介绍了 `urlopen()` 和 `urlretrieve()` 方法的使用技巧。其中,`urlopen()` 方法用于发送网络请求并获取响应内容,而 `urlretrieve()` 方法则用于下载文件并保存到本地。文章通过具体示例展示了这两个方法在实际开发中的应用场景,帮助读者更好地理解和掌握 `urllib` 模块的使用。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 深入浅出 webpack 系列(二):实现 PostCSS 代码的编译与优化
    在前一篇文章中,我们探讨了如何通过基础配置使 Webpack 完成 ES6 代码的编译。本文将深入讲解如何利用 Webpack 实现 PostCSS 代码的编译与优化,包括配置相关插件和加载器,以提升开发效率和代码质量。我们将详细介绍每个步骤,并提供实用示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
  • QT框架中事件循环机制及事件分发类详解
    在QT框架中,QCoreApplication类作为事件循环的核心组件,为应用程序提供了基础的事件处理机制。该类继承自QObject,负责管理和调度各种事件,确保程序能够响应用户操作和其他系统事件。通过事件循环,QCoreApplication实现了高效的事件分发和处理,使得应用程序能够保持流畅的运行状态。此外,QCoreApplication还提供了多种方法和信号槽机制,方便开发者进行事件的定制和扩展。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 在Python多进程编程中,`multiprocessing`模块是不可或缺的工具。本文详细探讨了该模块在多进程管理中的核心原理,并通过实际代码示例进行了深入分析。文章不仅总结了常见的多进程编程技巧,还提供了解决常见问题的实用方法,帮助读者更好地理解和应用多进程编程技术。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
author-avatar
妖泪蓝夕_746
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有