[转]视频教程:win32下的svn独立服务器的安装与配置
看着教程试了试,从搭建服务器到客户端Check out 、Commit等入门并不难。
?
注意一下各种路径的名字别搞混了就行。
?
我下载的是比较新的:
?
TortoiseSVN_v166chs
?
Setup-Subversion-1.6.6
?
两个版本刚好对应。
?
操作的过程中也没有遇到什么特别的问题,所以就直接转了教程,不多做总结了。
?
等以后碰到问题再补充吧。
?
?
转了2篇教程,中间这段入门足以,下面那段比较长,介绍的比较多,慢慢消化吧。
?
?
---------------------------------------我是华丽的无所不在的分割线-------------------------------------------
?
?
在线观看:
????? http://www.svnclub.com/sites/default/files/svnclub_vedio_1.htm
相关软件:
???? a:svn服务器软件: Setup-Subversion-1.6.13.msi
???? b:svn客户端软件: TortoiseSVN-1.6.12.20536-x64-svn-1.6.15.msi
本课教案:
svn独立服务器(Win32)架设步骤
一、准备软件
a:svn服务器软件: Setup-Subversion-1.6.13.msi, 版本1.6.13;
b:svn客户端软件: TortoiseSVN-1.6.12.20536-win32-svn-1.6.15.msi, 版本1.6.12;
c: 运行环境 Microsoft Windows XP Professional SP3。
二、安装软件
先安装客户端软件,再安装服务器端软件。选好路径,按提示安装就可以了。
三、建一个库根目录,创建一个版本库。
命令:
C:\svn\repository>cd \svn\repository
C:\svn\repository>svnadmin create svnregister
下面几步让用户进行认证登陆。
四、修改刚创建的版本库的配置文件:svnregister\conf\svnserve.conf。
## This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository.? (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)
### Visit http://subversion.tigris.org/ for more information.
[general]
### These options control access to the repository for unauthenticated
### and authenticated users.? Valid values are "write", "read",
### and "none".? The sample settings below are the defaults.
# anon-access = read???? (可设可不设。如果设则把# 去掉,并修改为anon-access = none,前面不能有空格,一行末尾最好也不要留空格)
# auth-access = write??? (可设可不设。把# 去掉,前面也不能有空格)
### The password-db option controls the location of the password
### database file.? Unless you specify a path starting with a /,
### the file's location is relative to the directory containing
### this configuration file.
### If SASL is enabled (see below), this file will NOT be used.
### Uncomment the line below to use the default password file.
password-db = passwd (必须要设。把# 去掉,前面也不能有空格)
### The authz-db option controls the location of the authorization
### rules for path-based access control.? Unless you specify a path
### starting with a /, the file's location is relative to the the
### directory containing this file.? If you don't specify an
### authz-db, no path-based access control is done.
### Uncomment the line below to use the default authorization file.
authz-db = authz (必须要设。把# 去掉,前面也不能有空格)
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa.? The default realm
### is repository's uuid.
realm = www.svnclub.com (可设可不设。在用户登陆的时候会显示)
[sasl]
### This option specifies whether you want to use the Cyrus SASL
### library for authentication. Default is false.
### This section will be ignored if svnserve is not built with Cyrus
### SASL support; to check, run 'svnserve --version' and look for a line
### reading 'Cyrus SASL authentication is available.'
# use-sasl = true
### These options specify the desired strength of the security layer
### that you want SASL to provide. 0 means no encryption, 1 means
### integrity-checking only, values larger than 1 are correlated
### to the effective key length for encryption (e.g. 128 means 128-bit
### encryption). The values below are the defaults.
# min-encryption = 0
# max-encryption = 256
五、修改版本库的用户文件:svnregister\conf\passwd。
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.
[users]
# harry = harryssecret
# sally = sallyssecret
arain = arain123?? (新增用户就这样,前面用户名,后面是密码,一定要顶格)
六、修改版本库的权限控制文件:svnregister\conf\authz。
### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to:
###? - a single user,
###? - a group of users defined in a special [groups] section,
###? - an alias defined in a special [aliases] section,
###? - all authenticated users, using the '$authenticated' token,
###? - only anonymous users, using the '$anonymous' token,
###? - anyone, using the '*' wildcard.
###
### A match can be inverted by prefixing the rule with '~'. Rules can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
[groups]( 用户组,方便人多时好配置)
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
# admin = hua001? (前面是组名后面是用户名)
# [/foo/bar]
# harry = rw
# &joe = r
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[/]
arain = rw ##用户名 = 读写权限
七、启动svnserve服务。
命令:
C:\svn\repository>svnserve -d -r C:\svn\repository
八、用客户端登陆访问。
在客户端输入:
svn://localhost/svnregister
以上步骤已成功架设好了svn独立服务器。为了方便开机自动启动,我们经常还需要把svnserve这个服务添加到系统服务中去。
九、把svnserve服务加到系统服务中。
命令:
C:\Documents and Settings\Administrator>sc create svn binpath= "svnserve.exe --service -r C:\svn\repository" displayname= "SVN Server" depend= Tcpip start= auto
注意:上面命令的每一个等号后面都有空格,否则会创建失败。
?
?
基本客户端操作
?
取出版本库到一个工作拷贝:
?
来到任意空目录下,如E:\svndemo\wc1,运行右键->Checkout,在URL?of?repository中输入svn://localhost/trunk,这样我们就得到了一份工作拷贝。
?
在工作拷贝中作出修改并提交:
?
打开readme.txt,作出修改,然后右键->Commit...,这样我们就把修改提交到了版本库,我们可以运行。
?
察看所作的修改:
?
readme.txt上右键->TortoiseSVN->Show?Log,这样我们就可以看到我们对这个文件所有的提交。在版本1上右键->Compare?with?working?copy,我们可以比较工作拷贝的文件和版本1的区别。
?
?
---------------------------------------我是华丽的无所不在的分割线-------------------------------------------
?
?
SUBVERSION系统学习笔记
长久以来,在开源世界中,CVS(Concurrent?Versions?System)一直都是版本控制的首选。但是现在用户有了另一个选择,就是?Subversion。Subversion是下一代版本控制系统,能替代?CVS。?Subversion是一个自由、开放源码的版本控制系统。它是一个通用系统,可用来管理任何类型的文件,?其中包括程序源码。
以下是我的学习笔记:
SVN?系统学习笔记
一?安装服务器端
下载Apache和SVN源码包:httpd-2.0.52.tar.gz,subversion-1.1.1.tar.gz
(因为redhat?9默认安装的Apache没有并包含--enable-so选项,所以无法产生mod_dav_svn.没有这个模块,SVN就无法采用http方式运行,所以必须重新编译新的Apache)
以root身份执行:
#tar?zxvf?httpd-2.0.52.tar.gz
#cd?httpd-2.0.52
#./configure?--enable-dav?--enable-so?--enable-maintainer-mode
#make
#make?install
此时会产生/usr/local/apache2目录
#tar?zxvf?subversion-1.1.1.tar.gz
#./configure?--with-apxs=/usr/local/apache2/bin/apxs
#make
#make?install
此时会自动在/usr/local/apache2/conf/httpd.conf添加
LoadModule?dav_svn_module?modules/mod_dav_svn.so
安装完成后,运行svnserver?--version确认版本为1.1.1。
SVN服务器安装结束.
二?安装客户机端
window客户机:
直接安装TortoiseSVN-1.1.1-UNICODE_svn-1.1.1.msi,方法同一般软件安装相同。
Linux客户机:
方法舆安装服务器相同。
(注意redhat?9默认安装的SVN版本为0.17.1,它的客户端命令svn无法舆新的SVN服务器通讯,必须重新安装)
三?建立仓库Repository
Subversion?的档案库是个中央仓储,?用来存放任意数量项目的受版本控管数据,建立方法很简单
#svnadmin?create?path/to/repos
举个例子:#svnadmin?create?/home/mysvn
四?运行服务器
Subversion服务器有两种运行方式,一是可以作为Apache?2.0的一个模块,以WebDAV/DeltaV协议与外界连通;另外,也可使用Subversion?自带的小型服务器程序svnserve。该程序使用的是自带的通讯协议,可以很容易地透过SSH以
以http方式运行
在/usr/local/apache2/conf/httpd.conf中加入:
<Location?/svn/repository>
DAV?svn
SVNPath?/home/mysvn
</Location>
在服务器的浏览器中输入网址:
http://localhost/svn/repository/
这时候,你会看到这样一副界面:
这表明服务器已经以http方式正常运行了.
以svnserve方式运行
这种方式的运行又可以分为以下两种(这和vsftp有些相似)
1)?standalone?mode
直接运行?#svnserve?–d
运行?lsof?-i?:3690可以看到SVN服务器已经在运行
2)?xinetd?mode
在/etc/xinetd.d/下生成svnserve文件,内容如下
service?svnserve
{
disable?=?no
socket_type?=?stream
protocol?=?tcp
wait?=?no
user?=?apache
server?=?/usr/local/bin/svnserve
server_args?=?-i
}
编辑?/etc/services?檔,加入底下两行:
svnserve?3690/tcp?#?Subversion?svnserve
svnserve?3690/udp?#?Subversion?svnserve
重启xinetd服务,运行?lsof?-i?:3690可以看到SVN服务器已经在运行
五?客户机访问
客户机的访问方法舆服务器的运行方式有直接关系
window客户机:
1)?服务器以http方式运行
安装完TortoiseSVN-1.1.1-UNICODE_svn-1.1.1.msi后,在你想工作的目录下点击右键,执行checkout,按上图输入即可。
2)?服务器以svnserve方式运行
同上的区别只是URL?of?repository变为?svn://svn服务器ip/home/mysvn
或者?svn+ssh://svn服务器ip/home/mysvn
(注意不是//svn服务器ip//svn/repository)
linux客户机:
1)?服务器以http方式运行
执行?#svn?checkout?http:?//svn服务器ip/svn/repository
2)?服务器以svnserve方式运行
执行?#svn?checkout?svn://svn服务器ip/home/mysvn
或者?#svn?checkout?svn+ssh://svn服务器ip/home/mysvn
六?客户认证机制
这舆服务器的运行方式有关
服务器以http方式运行
比如我们想给?Sally?与?Harry?送交存取档案库的权限.?首先,?我们必须把它们加入到密码档案.
#?###?第一次:?以?-c?建立档案
#?htpasswd?-c?/etc/svn-auth-file?harry
New?password:?*****
Re-type?new?password:?*****
Adding?password?for?user?harry
#?htpasswd?/etc/svn-auth-file?sally
New?password:?*******
Re-type?new?password:?*******
Adding?password?for?user?sally
#
接着,在/usr/local/apache2/conf/httpd.conf的加入:
<Location?/svn/repository?>
DAV?svn
SVNPath?/home/mycvs
AuthType?Basic
AuthName?"Subversion?repository"
AuthUserFile?/etc/svn-auth-file
Require?valid-user
</Location>
重新启动?Apache后,如果有人要访问SVN服务器,系统会要求他输入用户名和密码。?只有输入Sally?或Harry的用户名和相应的密码,才可以对档案库进行修改和访问
服务器以svnserve方式运行
默认下客户可以以匿名方式通过svn://方式任意访问档案库,为了限制其权限,比如只允许读操作,可以通过修改档案库conf子目录中的svnseve.conf文件来实现。
#vi?/home/mysvn/conf/svnseve.conf
修改[general]字段下内容为:
anon-access?=?read
如果设为anon-access?=?none,则匿名用户不可以通过svn://方式访问档案库
为了实现用户认证,我们一般采用svn+ssh://访问机制。
首先在svnseve.conf文件设置anon-access?=?none禁止匿名用户通过svn://方式访问档案库
在其后加入auth-access?=?write一行
auth-access?是限制有援权的使用者(使用svn+ssh://?来登入)?的存取权限,我们设为是可以读写。
当用户通过svn+ssh://访问时,服务器会自动启动ssh认证机制,要求用户输入密码,对于window用户来说还需要安装第三方软件openssh,才可以采用这种机制
七?Hook?scripts
挂勾?(hook)?是改动档案库时所触发的程序,?比如当你提交更动前,会先触发pre-commit,提交更动后,则会触发post-commit,我们可以利用hook来实现一些自动控制。档案库的hook?子目录中,?预设是放置各个档案库挂勾的范本:
post-commit.tmpl
pre-revprop-change.tmpl
post-revprop-change.tmpl
start-commit.tmpl
pre-commit.tmpl
如果要使用这些hook,就必须把它的后缀名.tmpl去掉,拷贝为
post-commit
pre-revprop-change
post-revprop-change
start-commit
pre-commit
这里主要介绍pre-commit和post-commit(事实上它们就是在特定的情况下被触发的普通的shell程序,至于shell的内容由用户自己随意编写,但是要保证名称不能改动)
pre-commit
本挂勾执行的时间为异动完成之后,?送交之前.档案库会传递两个自变量给这个程序:?档案库的路径,?以及准备送交的异动名称.?如果程序传回一个非零的结束值,?送交会被中止,?而异动会被删除.
如何应用pre-commit我们不妨举个例子:
假如有一个项目由Mail?Team,Login?Team和PHP?Team三个Team共同通过SVN系统开发完成。当项目准备发布的时候,?PM人员发现Mail功能方面存在一些?bug,需要Mail?Team去修改,为了防止其它Team的人员修改系统,我们可以在任何改动档案库的企图之前用pre-commit去检查log?message信息,(因为任何更动档案库的操作都必须提供log?message信息,PM可以事先舆?Mail?Team约定好一个log?message),如果舆pre-commit中设定的log?message不相符,则不能提交更动。
pre-commit源程序如下:
#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/local/bin/svnlook
$SVNLOOK?log?-t?"$TXN"?"$REPOS"?|?\
grep?–w?"bug1234"?>?/dev/null?||?exit?1
exit?0
本例中的log?message为”bug1234”,任何人想要提交更动就必须用?–m?“bug1234”参数,采用-m?“bug123”,-m?“bug12345”都会提交失败。
post-commit
本挂勾执行的时间是在异动送交,?新修订版被建立之后.?大多数的人用这个挂勾来寄出关于本次送交的电子邮件,?或是建立档案库的备份.?档案库会传递两个自变量给这个程序:?档案库的路径,?以及新建立的修订版号.?本程序的结束码会被忽略.
Subversion?源码树的?tools/hook-script?目录中包含了一个?commit-email.pl?命令,可以用来寄送包含描述指定送交的电子邮件.?这个邮件包含了更动路径列表,?该送交所对应的记录讯息,?使用者,?送交的日期,以及一个以?GNU?diff?样式表示的本次更动差异.?我们可以将这个程序舆post-commit这个hook搭配起来使用来实现档案库更动后自动mail给相关人员的功能。
post-commit源程序如下:
#!/bin/sh
REPOS="$1"
REV="$2"
commit-email.pl?"$REPOS"?"$REV"?PM@yourdomain.com?#####需要指明commit-email.pl的绝对路径
八?特殊性质
除了对你的目录与档案进行版本控制之外,?Subversion?还提供了一个界面,?可用来新增,?修改,?以及移除已纳入版本控制的目录与档案的版本控制描述数据.?我们称这个描述数据为性质,在这里我主要介绍以下几个比较重要的特殊性质
svn:mime-type
svn:mime-type?性质在?Subversion?中有很多作用.?除了作为储存档案的多用途因特网邮件延伸语法?(MIME)?分类之外,?这个性质的内容还会决定几项?Subversion?的行为特征.
举个例子,?如果?svn:mime-type?性质设为文字的?MIME?类别?,?Subversion?会假设该档的内容是二进制(也就是人类看不懂的数据).?Subversion?提供的功能中,?其中一项是在从服务器收到工作档的更新中,?依文字内容与文字列进行合并.?但是对含有二进制数据的档案,?根本就没有?“文字列”?的概念.?因此,?Subversion?对这些档案在更新时,?不会试着进行内文合并.?它改用另一种方式。
一般来说Subversion?在执行?svn?import?与?svn?add?子命令时,?会使用二进制侦测运算法的方式来协助使用者.?但是如果?Subversion?猜错了,?或是你希望将?svn:mime-type?设定成更为明确的值(可能是?image/png)你都可以移除或是手动编辑这个性质.
svn:ignore
svn:ignore?性质包含了档案样式的列表,?Subversion?处理时会忽略.?它可以与执行时期设定的?global-ignores?选项一起工作,?以便在类似?svn?status?的命令中过滤掉未纳入版本控制的目录与档案.
我们知道新增的文件和目录必须透过?svn?add?命令,?才会被纳入?Subversion?的管理.?svn?status?命令会将工作复本中未纳入版控制目录与档案显示出来.
$?svn?status?calc
M?calc/button.c
??calc/calculator
??calc/data.c
??calc/debug_log
??calc/debug_log.1
在这个范例中,?用?标注出来的文件就是未纳入版控制的档案.如果你不想每次执行?svn?status?时,?都看到这些档案,那么svn:?ignore?性质就是解决方案。你可以透过?svn?propedit?svn:ignore?calc?对?calc?目录加上一些忽略样式.?举个例子,将以下的值作为?svn:ignore?性质的新内容:
calculator
debug_log*
加上这个性质后再执行你的?svn?status?输出便会不同:
$?svn?status
M?calc
M?calc/button.c
??calc/data.c
现在,?所有不想看到的东西都从输出中消失了!
svn:keywords
Subversion?具有取代关键词(有关纳入版本控制档案的有用信息)进入档案内容的功能.
举个例子,?假设你有个文件,?想要在里面显示最近一次修改的日期.?你可以把这个负担加诸文件的作者身上,?让他们每一次送交更动之前,?顺便添加最近一次修改日期的部份.?但是迟早有人会忘记这件事.?换个方式,?只要叫?Subversion?对?LastChangedDate?关键词进行关键词取代即可.
Subversion?定义了可用来进行取代的关键词列表.?这个列表包含了以下五个关键词:
LastChangedDate
LastChangedRevision
LastChangedBy
HeadURL
Id
如果只把关键词定位锚加进档案里的话,?什么事也不会发生.要告诉?Subversion?是否该对某一个档案进行关键词取代,得使用svn:keywords这个性质。当它被设定时,?它会控制该档案哪个关键词应该被取代.
举个例子,?假设你有一个纳入版本控制的档案,?名为?weather.txt,?看起来像这样:
Here?is?the?latest?report?from?the?front?lines.
$LastChangedDate$
$Rev$
Cumulus?clouds?are?appearing?more?frequently?as?summer?approaches.
如果没有设定该档案的?svn:keywords?性质,?Subversion?什么事也不会作.?让我们开启关键词?LastChangedDate?的内容取代.
$?svn?propset?svn:keywords?"LastChangedDate?Author"?weather.txt
property?`svn:keywords'?set?on?'weather.txt'
$
在你送交了这个性质更动之后,?Subversion?会显示为:
Here?is?the?latest?report?from?the?front?lines.
$LastChangedDate:?2002-07-22?21:42:37?-0700?(Mon,?22?Jul?2002)?$
$Rev$
Cumulus?clouds?are?appearing?more?frequently?as?summer?approaches.
这样不管谁提交这个文件,都会在里面显示最近一次修改的日期。
svn:eol-style
除非另外指定版本控制档案的?svn:mime-type?性质,?Subversion?会假设档案包含人类可读的数据.这对于列尾符号??(EOL)?是很不幸地,?因为不同的操作系统会使用不同的符号来表示一列的结尾.?举个例子,?一般用在?Windows?平台上的列尾符号是两个??ASCII?控制字符?:返回字符?(CR)?与换行字符?(LF).?但是?Unix?软件就只使用?LF?字符来表示一列的结尾.这样以来?window客户提交的档案中的CR?字符在?linux客户端会显示成?^M,?而linux客户提交的档案中CR?字符在?Windows?客户端会被忽略。结果将档案里的所有文字列合并成一个超长的文字列,?这是因为没有返回CRLF字符组合的存在来表示一个换行。?解决的方法是?svn:eol-?style?性质.?当这个性质设定为native时,?Subversion?会根据系统的类型来决定是否对该档案的结尾进行自动处理。.
svn:externals
有的时候,?一个工作复本可能包含了数个不同来源的工作复本.?举个例子,?你可能想要有数个不同的目录,?各来自不同的档案库.我们可以通过?svn:externals?性质来宣告这一对对应关系。内容是子目录对应至?Subversion?档案库?URL?的多行表格.
$?svn?propget?svn:externals?calc
third-party/sounds?http://sounds.red-bean.com/repos
third-party/skins?http://skins.red-bean.com/repositories/skinproj
third-party/skins/toolkit?http://svn.red-bean.com/repos/skin-maker
当有人取出?calc?目录的工作复本,?Subversion?还会继续取出在外部定义里的项目.
$?svn?checkout?http://svn.example.com/repos/calc
A?calc
A?calc/Makefile
A?calc/integer.c
A?calc/button.c
Checked?out?revision?148.
Fetching?external?item?into?calc/third-party/sounds
A?calc/third-party/sounds/ding.ogg
A?calc/third-party/sounds/dong.ogg
A?calc/third-party/sounds/clang.ogg
Checked?out?revision?14.
Fetching?external?item?into?calc/third-party/skins
…
九?命令列表
具体用法可参考?Subversion?命令参考手册
Subversion?命令列客户端:?svn
svn?add
svn?cat
svn?checkout
svn?cleanup
svn?commit
svn?copy
svn?delete
svn?diff
svn?export
svn?help
svn?import
svn?info
svn?list
svn?log
svn?merge
svn?mkdir
svn?move
svn?propdel
svn?propedit
svn?propget
svn?proplist
svn?propset
svn?resolved
svn?revert
svn?status
svn?switch
svn?update
Subversion?命令列服务端:
svnadmin?list-unused-dblogs
svnadmin?create
svnadmin?dump
svnadmin?help
svnadmin?load
svnadmin?lstxns
svnadmin?recover
svnadmin?rmtxns
svnadmin?setlog
svnlook?author
svnlook?cat
svnlook?changed
svnlook?date
svnlook?diff
svnlook?dirs-changed
svnlook?help
svnlook?history
svnlook?info
svnlook?log
svnlook?proplist
svnlook?tree
svnlook?youngest
=================================================
Subversion比CVS更好用
?????长久以来,在开源世界中,CVS(Concurrent?Versions?System)一直都是版本控制的首选。但是现在用户有了另一个选择,就是Subversion。Subversion是下一代版本控制系统,能替代CVS,项目主页是http://subversion.tigris.org。?
????Subversion是一个自由、开放源码的版本控制系统。它是一个通用系统,可用来管理任何类型的文件,?其中包括程序源码。?
????它的初始目标很明确,实现绝大部分CVS的已有功能;充分考虑现有的CVS用户,在使用方式上模仿CVS,同时开发了一系列工具,使得基于CVS的项目能够顺利迁移到Subversion上。和CVS相比,它有很多优点,例如目录版本控制、不可分割的提交、一致的数据处理方式和更有效率的分支与标记等。?
????安装与初始化?
????Subversion建立在一个可移殖的APR?(Apache?Portable?Runtime,链接库)上。这使得Subversion可以工作在任何可以执行Apache的操作系统上。?
????Subversion有两种运行方式,一是可以作为Apache?2.0的一个模块,?以WebDAV/DeltaV协议与外界连通;另外,也可使用Subversion?自带的小型服务器程序。该程序使用的是自带的通讯协议,?可以很容易地透过SSH以tunnel方式使用。?
????最简单的安装Subversion的方法就是使用其提供的二进制版本(在项目网站上,有RPM、DEB和PORTS等格式的文件下载)。根据系统选择下载所需的文件,这里使用的Red?Hat,所以选择了RPM格式。?
#rpm?-Uvh?apr-0.9.5-0.2.i386.rpm
#rpm?-Uvh?apr-devel-0.9.5-0.2.i386.rpm
#rpm?-Uvh?apr-util-0.9.5-0.1.i386.rpm
#rpm?-Uvh?apr-util-devel-0.9.5-0.1.i386.rpm
#rpm?-Uvh?neon-0.24.4-1.i386.rpm
#rpm?-Uvh?neon-devel-0.24.4-1.i386.rpm
#rpm?-Uvh?subversion-1.0.0-1.rh90.i386.rpm
#rpm?-Uvh?subversion-devel-1.0.0-1.rh90.i386.rpm
#rpm?-Uvh?subversion-server-1.0.0-1.rh90.i386.rpm
#rpm?-Uvh?subversion-tools-1.0.0-1.rh90.i386.rpm?
????设置环境变量,命令如下:#export?EDITOR=vi?
????创建文件库,命令如下:#svnadmin?create?/opt/proj/fox?
????将目录doc的内容,直接导入至文件库的fox目录里,命令如下:#svn?import?/root/doc?file:///opt/proj/fox?
????Subversion组件?
????安装好之后,Subversion?会有数个不同的工具,主要分为客户端组件和服务器组件两类。?
????客户端组件供使用者使用,主要包括以下两个组件:
????svn?是命令行客户端程序,用来管理数据。
????Svnversion?用来查看工作拷贝的混合版本状态。?
????服务器组件供管理员使用,包括以下几个组件:
????svnlook?用来查看Subversion的文件库的工具。?
????Svnadmin?用来创建与调整Subversion的文件库的工具。
????mod_dav_svn?给Apache2.0网页服务器使用的模块;可以用来将用户的文件库透过网络对外开放。?
????Svnserve?一个独立的服务器程序,可以作为服务器进程执行,或是被SSH启动,让用户的文件库在网络上可供其它人存取的方法。?
????优势所在?
????Subversion在使用方式上与CVS相像,但是某些新的功能与设计和CVS是有区别的。下面谈谈两者的区别,让用户切实感受Subversion的优势。?
????不同的修订版号
????在CVS中,每个文件修订版号是不同的。这是因为CVS基于RCS。每一个文件在文件库都有对应的RCS文件,而文件库的结构,大致上就是依照目录结构展开。?
????目录版本
????Subversion也会追踪文件树结构,而不只是文件内容。Subversion中目录像文件一样,也有修订版号。“svn?add”与“svn?rm”命令可在目录上使用,就像在文件上使用一样。“svn?copy”与“svn?move”也是如此。但是这些目录不会马上让文件库有任何的变化。相反地,工作项目只是“预定”要被新增或删除。除非用户执行“svn?commit”,不然文件库不会有任何变动。这一点有点像Windows下删除文件,只是在fat表作删除标记,而未真删除。?
????离线功能?
????Subversion的工作副本是针对网络带宽瓶颈做优化。.svn与CVS目录一样,都是管理用的目录,但是svn还多存放了文件的原始副本。这让用户能够离线进行许多事,举例如下:
????“svn?status”显示本地更新;?
????“svn?diff”显示详细的更新细节;?
????“svn?revert”移除用户的本地更新。
????另外,Subversion客户端在提交文件副本时只传送差异。这点是CVS没有的。?
区分状态与更新
????在Subversion中,我们试着要解决“cvs?status”与“cvs?update”命令之间的混淆不清。“cvs?status”命令有两个目的,一是显示使用者在工作副本中的本地更改;二是显示使用者过时的文件。但是CVS显示的内容不易理解,许多CVS的使用者完全无法善用这个命令。取而代之地,就是执行“cvs?up”来看他们的更新。
????Subversion试着让“svn?status”输出的数据易于让人理解,来解决上面这个问题。另外,“svn?update”只会显示被更新的文件信息,而不会显示本地的更新。?
????属性
????Subversion的一个新功能,就是用户可以将任何的资料附加到文件与目录上。这些资料被称为属性。用户要设定或取得属性的名称,可使用“svn?propset”与“svn?propget”命令;要列出一个对象上所有的属性,可使用“svn?proplist”命令。?
????冲突消解
????CVS会在文件内放置“冲突标记”,将冲突地方标示出来,但CVS做得并不够。许多使用者记不住(或没看清)在终端上快速闪过的带有冲突标志的代码。
????Subversion解决这个问题的方法是让冲突更明确地标示出来。它会记得文件处于冲突的状态中,除非用户执行了“svn?resolved”命令,否则它不会允许用户提交。?
????二进制文件与文本文件
????Subversion比CVS更善于处理二进制文件。?因为CVS使用RCS的关系,所以对于一个变动中的二进制文件,它将每个更新的副本都储存下来。但是Subversion不管文件是文本还是二进制类型,在内部都是以二进制差异比较算法来表示文件的更新部分。这表示所有的文件在文件库中都是以差异的形式储存。而且在网络上传输的,都是较小的文件差异部分。
????CVS使用者必须以“-kb”标记二进制文件。Subversion不进行任何的关键词或列尾符号转换,除非用户要求这么做。Subversion内部会维护文件是否为“文本”或“二进制”文件的记录,将其保存在工作副本中。在执行“svn?update”的过程中,Subversion?会对本地的文本文件进行内容合并,但是不会对二进制文件做这样的事。?
????小结?
????Subversion有一份很好的文档——《Version?Control?with?Subversion》(http://svnbook.red-bean.com/)。它提供了有关Subversion的各方面内容,如使用、管理和开发等。?
????经过数年的开发,以替代CVS为目标的Subversion,终于出了1.0版本。相信以其强大的功能,对CVS良好的继承性,一定会有很好的发展。?
?
-------------------------------------------
Subversion初次尝试
从CVS到Subversion的理由,1)这种转变是一种飞跃;2)还是免费;3)Subversion的质量,效果和能力确实高于CVS;?
CVS用了好久了,一直要尝试Subversion,终于忍不住了……
Subversion可以以单机或服务器方式工作,推荐使用服务器方式;Subversion?可以配置成通过HTTPS或SSH隧道的方式访问,以提高服务器的安全性。
客户端介绍和安装:
客户端的安装比较简单,视具体项目需要可以使用不同的Clinets,具体使用方法大致相同。
Windows下的客户端,
TortoiseSVN是作为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端,很直观和便捷。项目主页:?TortoiseSVN?
AnkhSVN,Subversion的Visual?Studio插件,主页:AnkhSVN?
Subcommander,linux下的基于qt的Subversion客户端和diff,merge工具,连接:?Subcommander
其他更多的插件和客户端详见Subversion页面,Subversion相关连接
Subversion服务器安装:
下载组件,对于Redhat?Linux用户而言,去这儿下载Subversion的最新版本组件是最合适的地方,其他平台的用户也可以从Subversion的主页获得相应的安装文件。本文下面的安装配置以Fedora?Core?2平台为主。Fedora?2的用户注意:Fedora?Core?2官方发行中已经包含Subversion,请注意安装和升级。升级包和httpd插件包可以从这里ATrpms下载到。在Fedora?Core?2上,需要安装或升级的包:
mod_dav_svn-1.0.6-2_5.rhfc2.at.i386.rpm?Apache插件包
subversion-1.0.6-2_5.rhfc2.at.i386.rpm?Subversion程序包(升级)
subversion-perl-1.0.6-2_5.rhfc2.at.i386.rpm?Perl接口(不是必须)
设置不同的Subversion服务器:
Apache服务器,通过编辑/etc/httpd/conf.d/subversion.conf?文件来设置通过Apache服务器提供基于Web的SVN服务。
LoadModule?dav_svn_module?modules/mod_dav_svn.so
LoadModule?authz_svn_module?modules/mod_authz_svn.so?#?加载模块
#
#?Example?configuration?to?enable?HTTP?access?for?a?Subversion
#?repository,?"/home/svnroot".?This?repository?must?be?readable
#?and?writable?by?the?'apache'?user.
#?
#?URL设置http://yourserver/svn/repos?
DAV?svn?#?模块设置
SVNPath?/home/svnroot?#?SVN库路径
#?Limit?write?permission?to?list?of?valid?users.?以下为权限设定
#?Require?SSL?connection?for?password?protection.
#?SSLRequireSSL
AuthType?Basic?
AuthName?"Authorization?Realm"?
AuthUserFile?/path/to/passwdfile
Require?valid-user
============================
Subversion简明命令手册
之前的subversion尝试后,一直没有很好的总结一下经验,总觉得subversion和CVS没什么两样,仔细想来,Subversion和CVS还是有很多区别的,具体的比较且不去在这里说了,这儿总结一下几个常用的命令,这几条几乎是Linux/Unix下用SVN肯定用的着的命令,还是和CVS有些不同的,具体的东西还是要真的用了才可以想明白。
创建仓库(Repository)
svnadmin?create?/path/to/repository
svnadmin是有用的subversion系统管理命令,使用svnadmin?help查看在线帮助
信息。
添加新的项目(import?new?project)
subversion的手册推荐的项目目录结构,
project/
+?branches/
+?tags/
+?trunk/
+?dir1/
+?file1
+?file2
+?dir2/
svn?import?project?file:///repository_name/project?-m?"Comment"
svn?import?project?http://host/svn_dir/repository_name/project?-m?"Comment"
检出(checkout)项目
svn?checkout?file:///repository_name/project/trunk?project
svn?checkout?http://host/svn_dir/repository_name/project/trunk?project
列出仓库中的项目(list)
svn?list?--verbose?file:///repository_name/project
svn?list?--verbose?http://host/svn_dir/repository_name/project
状态查询(status)
svn?status
给出新文件,已经改变的文件和被删除的文件列表;
添加文件或目录(add)
svn?add
删除文件或目录(delete)
svn?delete
svn?delete?http://host/svn_dir/repository/project_dir?这条命令刚好可以用来删除
错误的import的某些项目!!
提交(commit)
svn?commit?http://host/svn_dir/repository/project_dir
更新(update)
svn?update
更新仓库中的文件到本地。
标签和特殊版本项目
使用copy命令
svn?copy?http://host/repos/project/trunk?http://host/repos/project/tags/1.0.0
用于创建某个特定版本的快照(snapshot);
svn?list?http://host/repos/project/tags/1.0.0
查看某个版本的内容