看着教程试了试,从搭建服务器到客户端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
查看某个版本的内容