Subversion+RabbitVCS 版本控制「建议收藏」

Subversion+RabbitVCS 版本控制「建议收藏」Ubuntu10.04学习笔记(4)——Subversion+RabbitVCS版本控制2011年04月19日星期二17:281、安装Subversion软件sudoapt-getinstallapache2%先安装apache,配合阅读svn用,并且平时开发也是要用到的sudoapt-getinstallsubversion%svn…

大家好,又见面了,我是你们的朋友全栈君。Ubuntu 10.04学习笔记(4)——Subversion+RabbitVCS 版本控制

2011年04月19日 星期二 17:28

1、安装Subversion软件

sudo apt-get install apache2 %先安装apache,配合阅读svn用,并且平时开发也是要用到的

sudo apt-get install subversion %svn

sudo apt-get install libapache2-svn %svn中apache的库

sudo /etc/init.d/apache2 restart (重启apache服务器) %测试一下apache是否运行正常,记住这条命令,会经常用到

2、创建仓库

许多位置都可以放置 Subversion 文件仓库,其中两个最常用的是:/usr/local/svn 以及 /home/svn。为了在下面的描述中简单明了,我们假设您的 Subversion 文件仓库放在 /home/svn,并且你的项目名称是简单的“Repository”。

sudo svnadmin create –fs-type fsfs /home/svn/Repository

# 运行创建版本库的命令,指定数据存储为 FSFS,如果要指定为 Berkeley DB,则将 fsfs 替换为 bdb

# /home/svn/Repository 为所创建仓库的路径,理论上可以是任何目录

同样的,也有许多常用的方式设置文件仓库的访问权限。然而,这也是安装过程中最经常出现错误的地方。通常的情况下,应该创建一个名为“Subversion”的用户组,该组是SVN仓库所在的目录的拥有者。下面是一个快速的操作说明,有关内容请参考相关文档的详细说明:

* 在 Ubuntu 菜单上选择“系统->系统管理->用户和组”;

* 切换到“组”标签;

* 点击“添加组”按钮;

* 组名为“subversion”;

* 将您自己和“www-data”(Apache 用户)加入组成员中;

* 点击“OK”以确认修改,关闭该程序。

或者使用命令完成上述功能(增加组,并且把用户加到组里):

sudo addgroup subversion

sudo usermod -G subversion -a www-data

再或者直接使用命令编辑组文件”sudo vi /etc/group”,增加组和成员(不推荐):

$ sudo vi /etc/group

结果看上去,像这样。

$ cat /etc/group|grep subversion

subversion:x:1001:www-data,exp

您需要注销然后再登录以便您能够成为 subversion 组的一员,然后就可以执行签入文件(Check in,也称提交文件)的操作了。

现在执行下面的命令

$ sudo mkdir /home/svn

$ cd /home/svn

$ sudo mkdir Repository

$ sudo chown -R root:subversion Repository

下面的命令用于创建 SVN 文件仓库:

$ sudo svnadmin create /home/svn/Repository

赋予组成员对所有新加入文件仓库的文件拥有相应的权限:

$ sudo chmod -R g+rws Repository

如果上面这个命令在创建SVN文件仓库之前运行,你可能在后续Check in的时候遇到如下错误:

Can’t open ‘/home/svn/Repository/db/txn-current-lock’: Permission denied

查看txn-current-lock文件的权限和用户以及组信息,应该类似于:

$ ls -l /home/svn/Repository/db/txn-current-lock -rw-rwSr– 1 root subversion 0 2009-06-18 15:33 txn-current-lock

除了权限以外,用户及其组如果不对,则仍然会遇到上述问题,可以再次运行命令:

$ sudo chown -R root:subversion Repository

3、修改配置文件/var/svn/conf/svnserve.conf

sudo gedit /home/svn/Repository/conf/svnserve.conf

1. #去掉#[general]前面的#号

2. [general]

3. #匿名访问的权限,可以是read,write,none,默认为read

4. anon-access = none

5. #认证用户的权限,可以是read,write,none,默认为write

6. auth-access = write

7. #密码数据库的路径,去掉前面的#

8. password-db = passwd

注意:所有的行都必须顶格,否则报错。

4、修改配置文件passwd

sudo gedit /home/svn/Repository/conf/passwd

1. [users]

2. svnuser = password

3. jesszjessz = jessz

注意:

◆一定要去掉[users]前面的#,否则svn只能以匿名用户登录,客户端不会出现登录窗口,除非你的anon不为none,否则将返回一个错误。

◆这里的密码都是没有加密的。

5、停止Subversion服务器:killall svnserve

6、启动Subversion服务器

对于单个代码仓库,启动命令:svnserve -d -r /home/svn/Repository –listen-host 10.19.3.103

其中-d表示在后台运行,-r指定服务器的根目录,这样访问服务器时就可以直接 用svn://服务器ip来访问了。

如果服务器有多ip的话–listen-host来指定监听的ip地址. 我们可以在Subversion客户端中通过svn://10.19.3.103来访问Subversion服务器.对于多个代码仓库,我们在启动时也可以用-r选项来指定服务器根目录,但访问时需要写上每个仓库相对于svn根目录的相对路径. 比如,我们有两个代码仓库/var/vss/repo1 和/var/vss/repo2,我们用 svnserve -d -r /var/vss –listen-host 10.19.3.103来启动,那么在客户端访问时可以用svn://10.19.3.103/repo1和svn: //10.19.3.103/repo2来分别访问两个项目。

Subversion 文件仓库可以通过许多不同的方式进行访问(Check Out,签出)——通过本地硬盘,或者通过各种网络协议。无论如何,文件仓库的位置总是使用 URL 来表示。下表显示了不同的 URL 模式对应的访问方法:

模式 访问方法

file:/// 直接访问本地硬盘上文件仓库

http:// 通过 WebDAV 协议访问支持 Subversion 的 Apache 2 Web 服务器

https:// 类似 http://,支持 SSL 加密

svn:// 通过自带协议访问 svnserve 服务器

svn+ssh:// 类似 svn://,支持通过 SSH 通道

1)直接访问文件仓库(file://)

这是所有访问方式中最简单的。它不需要事先运行任何 SVN 服务。这种访问方式用于访问本地的 SVN 文件仓库。语法是:

$ svn co file:///home/svn/Repository

或者

$ svn co file://localhost/home/svn/Repository

注意:如果您并不确定主机的名称,您必须使用三个斜杠(///),而如果您指定了主机的名称,则您必须使用两个斜杠(//).

对文件仓库的访问权限基于文件系统的权限。如果该用户具有读/写权限,那么他/她就可以签出/提交修改。如果您像前面我们说描述的那样设置了相应的组,您可以简单的将一个用户添加到“subversion”组中以使其具有签出和提交的权限。

通过 WebDAV 协议访问(http://)

要通过 WebDAV 协议访问 SVN 文件仓库,您必须配置您的 Apache 2 Web 服务器。执行下面的命令,配置apache启动时加载dav模块

cd /etc/apache2/mods-enabled

sudo ln -s ../mods-available/dav.load dav.load

sudo ln -s ../mods-available/dav_svn.conf dav_svn.conf

sudo ln -s ../mods-available/dav_svn.load dav_svn.load

编辑加入下面的代码片段到 /etc/apache2/httpd.conf中:

#LoadModule dav_module modules/mod_dav.so %加载mod_dav模块

#LoadModule dav_svn_module modules/mod_dav_svn.so %加载mod_dav_svn模块

LoadModule authz_svn_module /usr/lib/apache2/modules/mod_authz_svn.so %加载mod_anthz.svn模块

<Location /Repository> % location标签头

DAV svn

SVNPath /home/svn/Repository %指明版本库的路径

AuthType Basic %认证类型为基本认证

AuthName “SVN Repository” %认证名称,将在IE界面弹出一个对话框,其标题就是SVN Repository

AuthUserFile /home/svn/Repository/RepositoryPasswdFile %加载密码文件

# AuthzSVNAcessFile //home/svn//Repository/accesspolicy

# satisfy Any

# Require valid-user %要求验证用户,即不能匿名访问

</Location> %location标签尾

加#号的语句被注释掉了!如果有两个以上的版本库,可以针对每个版本库添加不同的location标签,两个互不影响。

配置完成后,您必须重新起动 Apache 2 Web 服务器,请输入下面的命令:

sudo /etc/init.d/apache2 restart

就可以在http://localhost/Repository访问svn库了,编辑一下/var/www/index.html文件,加上个链接,可以使自己方便些。

接下来,您需要创建 /etc/subversion/passwd 文件,该文件包含了用户授权的详细信息。要添加用户,您可以执行下面的命令:

sudo htpasswd -c /etc/subversion/passwd user_name

它会提示您输入密码,当您输入了密码,该用户就建立了。“-c”选项表示创建新的/etc/subversion/passwd文件,所以user_name所指的用户将是文件中唯一的用户。如果要添加其他用户,则去掉“-c”选项即可:

sudo htpasswd /etc/subversion/passwd other_user_name

您可以通过下面的命令来访问文件仓库:

$ svn co http://hostname/svn/myproject myproject –username user_name

它会提示您输入密码。您必须输入您使用 htpasswd 设置的密码。当通过验证,项目的文件就被签出了。

警告:密码是通过纯文本传输的。如果您担心密码泄漏的问题,我们建议您使用 SSL 加密。

通过具有安全套接字(SSL)的 WebDAV 协议访问(https:// )

通过具有 SSL 加密的 WebDAV 协议访问 SVN 文件仓库(https:// )非常类似上节所述的内容,除了您必须为您的 Apache 2 Web 服务器设置数字证书之外。

您可以安装由诸如 Verisign 发放的数字签名,或者您可以安装您自己的数字签名。

我们假设您已经为 Apache 2 Web 服务器安装和配置好了相应的数字证书。现在按照上一节所描述的方法访问 SVN 文件仓库,别忘了把 http:// 换成 https://。如何,几乎是一模一样的!

通过自带协议访问(svn://)

当您创建了 SVN 文件仓库,您可以修改 /home/svn/myproject/conf/svnserve.conf 来配置其访问控制。

例如,您可以取消下面的注释符号来设置授权机制:

# [general]

# password-db = passwd

现在,您可以在“passwd”文件中维护用户清单。编辑同一目录下“passwd”文件,添加新用户。语法如下:

username = password

#(注意行开始不要有多余空格)

要了解详情,请参考该文件。

现在,您可以在本地或者远程通过 svn://访问 SVN 了,您可以使用“svnserve”来运行 svnserver,语法如下:

$ sudo svnserve -d –foreground -r /home/svn

# -d — daemon mode

# –foreground — run in foreground (useful for debugging)

# -r — root of directory to serve

要了解更多信息,请输入:

$ svnserve –help

当您执行了该命令,SVN 就开始监听默认的端口(3690)。您可以通过下面的命令来访问文件仓库:

$ svn co svn://hostname/myproject myproject –username user_name

基于服务器的配置,它会要求输入密码。一旦通过验证,就会签出文件仓库中的代码。

要同步文件仓库和本地的副本,您可以执行 update 子命令,语法如下:

$ cd project_dir

$ svn update

要了解更多的 SVN 子命令,您可以参考手册。例如要了解 co (checkout) 命令,请执行:

$ svn co –help

或者这样

$ svn –help commit

或者直接

svn help co

checkout (co): 从版本库签出工作副本。

使用: checkout URL[@REV]… [PATH]

一个实例:

killall svnserve; svnserve -d -r /home/svn/

/home/svn/lj12-source/conf ☎ dog *

authz:[groups]

authz:lj12 = veexp

authz:[lj12-source:/] <-注意写法。

authz:veexp = rw

authz:@lj12 = rw

authz:* = passwd:[users] <-2个用户和密码。

passwd:veexp = icep

passwd:test = test

svnserve.conf:[general]

svnserve.conf:anon-access = none

svnserve.conf:auth-access = write

svnserve.conf:password-db = passwd

svnserve.conf:authz-db = authz <-如果不启用authz,则test也可以取出。

☎ svn co svn://localhost/lj12-source –username veexp

认证领域: <svn://localhost:3690> a712643f-661e-0410-8ad4-f0554cd88977

用户名: veexp “veexp”的密码:

A lj12-source/tim.h A lj12-source/en.c

……

认证失败的密码缓冲记录位置,明文密码。到1.6版本,可能使用keyring管理。如果调试密码,直接删除如下文件就可。

~/.subversion/auth/svn.simple/:

eea34a6f7baa67a3639cacd6a428dba4

通过具被SSH隧道保护的自带协议访问(svn+ssh://)

配置和服务器进程于上节所述相同。我们假设您已经运行了“svnserve”命令。

我们还假设您运行了 ssh 服务并允许接入。要验证这一点,请尝试使用 ssh 登录计算机。如果您可以登录,那么大功告成,如果不能,请在执行下面的步骤前解决它。

svn+ssh:// 协议使用 SSH 加密来访问 SVN 文件仓库。如您所知,数据传输是加密的。要访问这样的文件仓库,请输入:

$ svn co svn+ssh://hostname/home/svn/myproject myproject –username user_name

注意:在这种方式下,您必须使用完整的路径(/home/svn/myproject)来访问 SVN 文件仓库

基于服务器的配置,它会要求输入密码。您必须输入您用于登录 ssh 的密码,一旦通过验证,就会签出文件仓库中的代码。

您还应该参考 SVN book 以了解关于 svn+ssh:// 协议的详细信息。

7、配置svn服务随系统启动

创建/etc/init.d/svnserve文件,文件中包含如下内容:

#!/bin/sh

/usr/bin/svnserve -d -r /home/svn/

执行

sudo chmod a+x /etc/init.d/svnserve

在启动阶段2中启动,具体配置方法为运行命令:

cd /etc/rc2.d

sudo ln -s /etc/init.d/svnserve S92svnserve

这样,svn就会随系统在开机时候启动啦。可以自己手动运行一下立即启动,将项目导入到svn库中使用svn import命令

8、客户端RabbitVCS

具体安装参见 http://wiki.rabbitvcs.org/wiki/install/ubuntu

首先在源里添加:

sudo add-apt-repository ppa:rabbitvcs/ppa

sudo apt-get update

sudo apt-get install rabbitvcs-core rabbitvcs-nautilus rabbitvcs-thunar rabbitvcs-gedit rabbitvcs-cli

安装完毕后,注销,重新登录,在文件夹和文件夹内点击鼠标右键就可用RabbitVCS操作了。

9、自动网络备份

在home/jerry文件夹(输入cd回车就进入了)中建立cron目录,建立一个svnbackup.sh文件,内容如下:

#!/bin/sh

projects=”Repository redirecter”

svnroot=”/svn”

backdir=”/home/jerry/Dropbox/code/svnbackup”

date=`date +%Y%m%d`

for project in $projects

do

/usr/bin/svnadmin dump $svnroot/$project > $backdir/${project}_$date

done

其中projects里面可以配置你的多个工程。

执行crontab -e,输入如下内容:

0 22 * * 6 (cd /home/jerry/cron && /home/jerry/cron/svnbackup.sh)

/home/jerry/cron/是home文件夹的路径,记得添加时候修改。

dropbox是一个跨平台的,多pc自动同步文件软件,在国内的下载速度可以达到500kB以上(公司的网络比较快哈,在家里用,一般就是133kB),十分强大。就用它来备份svn库再好不过了。注册账号,下载软件

这样就全都搞好了,每周六的22点就会自动帮你备份好svn,dropbox也会帮你把svn库传到你的账号中存好。如果你在自己的多台电脑上都安装了dropbox,每台电脑都会自动拥有svn备份数据(dropbox网络上也有一份)。想修改备份的时间,请参考crontab

10、svn dump 全自动备份脚本

From: http://carywu.blog.51cto.com/13185/207571

shell功能:

这个脚本完成的主要工作是先用svnadmin hotcopy命令备份代码仓库到指定目录,用tar打包保存;另一项工作是会删除10天前(因为我选择的是每天备份,你可以根据需要制定自己的方案)的副本。以下脚本命名保存为backup.sh。

#!/bin/bash

project=”Repository”

date=`date +%Y%m%d`

log=/home/jerry/svnback/cpreport.log

SRCPATH=/home/jerry/svn/Repository

backdir=/home/jerry/svnback

DISTPATH=/home/jerry/svnback/`date +%Y%m%d`

SVNADMIN=/usr/bin/svnadmin

echo ” – BACKUP START —————– ”

echo ” – BACKUP START —————– ” >> $log

# omit request in the same day

if [ -d $DISTPATH ]

then

echo `date +”%y-%m-%d %H:%M:%S”`” backupfile [$DISTPATH] has exist!”

echo `date +”%y-%m-%d %H:%M:%S”`” backupfile [$DISTPATH] has exist!” >> $log

# backup repos with `svnadmin hotcopy’

else

mkdir $DISTPATH

chmod g+s $DISTPATH

mkdir $DISTPATH/Repository

chmod g+s $DISTPATH/Repository

svnadmin hotcopy $SRCPATH $DISTPATH/Repository >>$log 2>&1

#svnadmin hotcopy $SRCPATH/Project2 $DISTPATH/Project2

echo `date +”%y-%m-%d %H:%M:%S”`” backup [$project] done into [$DISTPATH]”

echo `date +”%y-%m-%d %H:%M:%S”`” backup [$project] done into [$DISTPATH]” >> $log

# compress backup data

cd $backdir

dumpfile=$date.$project.tar.gz

$SVNADMIN hotcopy $SRCPATH $project –clean-logs

tar -czvf $dumpfile $project > /dev/null

echo `date +”%y-%m-%d %H:%M:%S”`” compress [$DISTPATH] finished”

echo `date +”%y-%m-%d %H:%M:%S”`” compress [$DISTPATH] finished” >> $log

#remove temp project dir

rm -rf $project

fi

#运行删除脚本,对过期备份进行删除。

# remove old dump file [at most 10 copies store here]

olddump=$(date +%Y%m%d –date=’10 days ago’).$project.tar.gz

if [ -f $olddump ]

then

rm -f $olddump >> $log 2>&1

echo `date +”%y-%m-%d %H:%M:%S”`” [$olddump] delete success!” >> $log

else

echo `date +”%y-%m-%d %H:%M:%S”`” [$olddump] not exist!” >> $log

fi

echo ” – BACKUP ENDED —————– ”

echo ” – BACKUP ENDED —————– ” >> $log

简单测试通过后,就可以添加到crontab(crontab用于管理周期事务)了,第一次使用crontab -e命令时需要选择编辑器,编辑格式非常简单:

命令行:jerry@jerry-desktop:~$ crontab -e

显示:

no crontab for jerry – using an empty one

Select an editor. To change later, run ‘select-editor’.

1. /bin/ed

2. /bin/nano <—- easiest

3. /usr/bin/emacs23

4. /usr/bin/vim.basic

5. /usr/bin/vim.gnome

6. /usr/bin/vim.gtk

7. /usr/bin/vim.nox

8. /usr/bin/vim.tiny

Choose 1-8 [2]: 5 %根据自己的爱好选择

>>>> 下面是编辑的内容

1 # m h dom mon dow command

2 0 23 * * * /home/jerry/svn/Repository/backup.sh %24个小时更新一次

参见 http://www.chinaunix.net/jh/6/271992.html

>>>> 保存退出,自动加入事务列表

crontab: installing new crontab

>>>> 查看当前事务

$ crontab -l

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161122.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • html中设置背景图片为平铺,html背景图片怎么设置平铺方式

    html中设置背景图片为平铺,html背景图片怎么设置平铺方式在html中,可利用background-repeat属性来设置背景图片的平铺方式;当属性值设置为“repeat”时可向垂直和水平方向平铺,“repeat-x”时可水平平铺,“repeat-y”时可垂直平铺,“no-repeat”时不平铺。本教程操作环境:windows7系统、CSS3&&HTML5版、DellG3电脑。html背景图片设置平铺方式div{border:1px…

  • Android启动模式之singleTask解析「建议收藏」

    Android启动模式之singleTask解析「建议收藏」在android应用程序中,最重要的组件之一Activity有4中启动模式,其中singleTask更加官方文档的描述很容易让人迷惑,其实原因在于,activity的启动方式除了受标签android:launchMode的影响之外,还会被启动参数所左右比如,intent的标志位FLAG_ACTIVITY_NEW_TASK,任务标签 android:taskAffinity。本文将对singleTa

  • 易文档-快速编写专业漂亮的API文档,产品文档,使用手册

    易文档https://easydoc.top让您轻松编写和维护高质量的文档。从需求文档、API文档、部署文档到使用手册,多种定制文档编辑器,满足您整个开发周期需求;支持接口在线测试,一键生成mock配置。极致的编写体验,优雅的排版,让文档成为一种乐趣。查看示例文档查看使用技巧…

  • fastclick使用与解密

    fastclick使用与解密fastclick可以消除点击延时提高程序的运行效率。FastClick是一个非常方便的库,在移动浏览器上发生介于轻敲及点击之间的指令时,能够让你摆脱300毫秒的延迟。FastClick可以让你的应用程序更加灵敏迅捷。支持各种移动浏览器,比如Safari、Chrome、Opera等。

  • Python学习之路【第一篇】-Python简介和基础入门

    Python学习之路【第一篇】-Python简介和基础入门1.Python简介1.1Python是什么相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一。从性质上来讲它和我们熟知的C、java、php等没有什么本质的区别,也是

  • 太原java技术培训_面试官说java基础不行

    太原java技术培训_面试官说java基础不行二、六大性能调优技术(JVM调优+网络调优+数据库调优+LINUX内核调优+中间件底层探索+容器环境调优)手绘板(脑图)1、JVM调优JVM调优必备理论知识-GcCOLLECTOR-三色标记垃圾回收算法串讲JVM常见参数总结JVM调优实战JVM(HotSpot)核心源码解读JVM核心模块(GC算法)手写实战2、网络调优TCP内核参数JAVAAPI参数IO模型TRADEOFF资源隔离优化网卡、CPU配置调优网络安全的加密算法与数字签名3、数据库调优Mysql性能监

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号