[size=medium]首先来一张subversion的架构图
[img]http://svnbook.red-bean.com/nightly/en/images/ch01dia1.png[/img]
[b]1.subversion的安装主要是要解决依赖的类库:[/b]
1).libapr, libapr-util(apache portable runtime)
layer that allows suberversion client and server to run on different OS.
这两个lib如果单独装的话(还修改安装路径), 可能出现错误.
所以可以使用subversion自身的dependency 包进行安装, unpack即可,会自动在subversion发行版中加入相关的文件夹,比如apr, apr-util, ...
还可以将apr,apr-util源码加到subversion发行版目录下(apr,apr-util文件夹)
然后对apr, apr-util进行./buildconf 即可
2).zlib(libz)
3).libneon or libserf (option for client to send http request)
4).openssl (option for client and server)
5).expat xml parser
compressing binary differences
6).sqlite3 v-amalgamation
manage some internal databases
默认使用FSFS文件系统
cd apr; ./buildconf ; cd ../apr-util ; ./buildconf ; cd ..
./configure --prefix=/opt/subversion \
--with-zlib=/opt/zlib \
--with-sqlite=/opt/sqlite \
[b]2.访问subversion repository[/b]
从subversion的架构图我们可以看出,访问subversion repository(我们的数据所在地,也叫版本库), 可以有三种方式,
1).第一种是如果客户端跟服务器的repository都在同一server下,
使用的协议是file:///
如: svn import . file:///c:/rep/hello -m ''
svn list file:///home/rep/hello
2).第二种,也是比较多人使用的,采用的svn://协议,服务器端启动svnserve这个程序,通过它访问repository,
如 svn import . svn://123.44.21.34/hello -m ''
3).第三种是通过apache这个http服务器访问repository,协议当然就是http://了
[b]
3.建立repository资源库[/b]
从上面又可以看出,首先我们得先建立我们的repository,这样才能使用以上三种方式访问,这个repository是我们的关健资源库,所有的操作最后都是反映到这里来的.
首先建立这个repository
#svnadmin create /path/to/repository
这样在/path/to/repository下就会生成几个关健的文件夹:
比如conf, db,除了conf可以修改,其他文件,文件夹都不能随便修改删除等
conf下有svnserve.conf, authz, passwd这三个文件
这个文件夹下的配置文件是配置svnserve服务器的,跟其他另外两种访问方式无关.
svnserve.conf主要配置[general]下的东东,
比如 anon-access=none,auth-access=write 可以使匿名用户不能访问,而已验证的用户可以进行读写操作.
验证用户可以在 password-db = passwd说明,
这样在conf/passwd文件中定义的用户都是svnserve的用户.
在conf/passwd文件中定义用户很简单: 在[users]下一个用户一行,
格式 username = password(明文)
每个用户又有可能有不同的访问资源权限,比如小王不能访问buyshop这个项目的资源,而其他可以
在svnserve.conf 中的[general]注释掉authz-db = authz
这样conf/authz文件中定义的权限就会被应用.
具体实例参照authz文件本身,它有詳細说明
[b]4.启动svnserve[/b]
repository(版本库)建好了,svnserve配置文件修改好了,
现在是启动svnserve服务器的时候了
#svnserve -d -r /path/to/repository
这样就在后台启动了,从-r可以看出我们可以有不同的版本库,可以按需使用
[b]5.subversion的命令[/b]
subversion系统自带的工具有服务器端的如svnadmin,svnserve,
也有客户端的如使用最多的svn 命令,svn下面还有很多子命令
[b]6.上传项目[/b]
现在应该将我们的项目上传到subversion的repository供他们管理
项目的结构可以考虑trunk,branches,tags
#svn import . svn://server-ip/hello -m 'initial'
这样就将当前目录下的所有文件,文件夹上传到repository下的hello文件夹中
当我们需要使用由svn版本控制的项目文件,必须checkout到本地
#svn checkout svn://serveer-ip/hello/trunk hello
这样就将hello项目主线的文件下载到当前目录下的hello文件夹中
---------------------------------------------------------------------------------------
[b]7.客户端命令svn[/b]
当我们checkout出项目之后,进入到项目文件夹中,这个例子是当前目录下的hello文件夹
svn命令要在工作拷贝中(working copy)运行
#cd hello
我们可以离线操作本地项目文件,修改,增加,删除等等.
当确定修改完成,需要保留这些信息时,这才使用svn commit -m ''命令去跟服务器联系说我修改了哪些文件,给我这些改动状态一个版本号.
客户端commit一次,就将版本号加1,最开始import 时版本号为1
当我们完成一个项目或其他原因想将项目拿出来而不带版本信息,这时可用
#svn export svn://server-ip/hello/trunk hello_2
或可以指定版本号,默认是最新版本号 如 -r 1234
常用客户端命令:
1). svn add file/dir
eg: svn add --depth=empty otherdir (只增加otherdir文件夹)
svn add * --force 递归增加全部未加入版本控制的文件
2).svn cat url (查看版本库文件的内容而不checkout出来)
eg: svn svn://192.168.1.1/bz/readme.txt
3).svn changelist — Associate (or deassociate) local paths with a changelist.
svn cl issue12 foo.a foo.b(将foo.a, foo.b加入changelist可以方便以后commit)
svn commit --changelist issue12 -m 'fix issuse 12'
4).svn checkout — 从版本库取出一个工作拷贝
svn co $svn_url [path]
5).svn cleanup [path]— 递归清理工作拷贝
6).svn commit -m 'comment' [path] — 将修改从工作拷贝发送到版本库
7).svn copy SRC DST — 拷贝工作拷贝的一个文件或目录到版本库
SRC, DST可以是working copy, repository的自由组合
8).svn delete [PATH/URL] — 从工作拷贝或版本库删除一个项目
PATH指working copy下的路径, URL指repository的路径
9).svn diff — 比较两条路径的区别
10). svn export — 导出一个干净的目录树
svn export URL PATH
11). svn -m 'comment' import [PATH] URL — 递归提交一个路径的拷贝到版本库
如果PATH ommited, '.' is assumed
这个时候PATH并没有纳入版本控制, 需要checkout出来成为working copy
12). svn info [PATH/URL]— 显示本地或远程条目的信息
13). svn list — 列出版本库目录的条目
14). svn lock — 锁定版本库的工作拷贝路径或URL,所以没有其他用户可以提交这些文件的修改
svn lock jp.c
对应的 svn unlock
15). svn log — 显示提交日志信息
16). svn mkdir — 创建一个纳入版本控制的新目录
svn mkdir hello
svn mkdir -m 'f' URL
17). svn move SRC... DST — 移动一个文件或目录
18). svn resolve PATH...— Resolve conflicts on working copy files or directories
19). svn revert PATH... — 取消所有的本地编辑
20). svn status [PATH]— 打印工作拷贝文件和目录的状态
21). svn switch — 把工作拷贝更新到别的URL
svn switch URL[@PEGREV] [PATH]
svn switch --relocate FROM TO [PATH...]
22).svn update — 更新你的工作拷贝
-----------------------------------------------------------------
[b]8.服务器端的命令svnadmin, svnlook[/b]
在服务器端直接操作文件路经, 而不是URL
svnadmin is the administrative tool for monitoring and repairing your Subversion repository
1). svnadmin create REPOS_PATH — 创建一个新的空的版本库
[b]9.当上传eclipse项目工程到subversion中时,必须加上.project .classpath文件,再加上.settings文件夹[/b]
[b]10.relocate[/b]
subversion的库是可复制的, 当要将库移到另外的机器上, 需要relocate
cd到项目目录下
#svn switch --relocate FROM TO
如# svn switch --relocate svn://192.168.1.112/bidaround/trunk svn://192.168.1.223/bidaround/trunk
[/size]
[img]http://svnbook.red-bean.com/nightly/en/images/ch01dia1.png[/img]
[b]1.subversion的安装主要是要解决依赖的类库:[/b]
1).libapr, libapr-util(apache portable runtime)
layer that allows suberversion client and server to run on different OS.
这两个lib如果单独装的话(还修改安装路径), 可能出现错误.
所以可以使用subversion自身的dependency 包进行安装, unpack即可,会自动在subversion发行版中加入相关的文件夹,比如apr, apr-util, ...
还可以将apr,apr-util源码加到subversion发行版目录下(apr,apr-util文件夹)
然后对apr, apr-util进行./buildconf 即可
2).zlib(libz)
3).libneon or libserf (option for client to send http request)
4).openssl (option for client and server)
5).expat xml parser
compressing binary differences
6).sqlite3 v-amalgamation
manage some internal databases
默认使用FSFS文件系统
cd apr; ./buildconf ; cd ../apr-util ; ./buildconf ; cd ..
./configure --prefix=/opt/subversion \
--with-zlib=/opt/zlib \
--with-sqlite=/opt/sqlite \
[b]2.访问subversion repository[/b]
从subversion的架构图我们可以看出,访问subversion repository(我们的数据所在地,也叫版本库), 可以有三种方式,
1).第一种是如果客户端跟服务器的repository都在同一server下,
使用的协议是file:///
如: svn import . file:///c:/rep/hello -m ''
svn list file:///home/rep/hello
2).第二种,也是比较多人使用的,采用的svn://协议,服务器端启动svnserve这个程序,通过它访问repository,
如 svn import . svn://123.44.21.34/hello -m ''
3).第三种是通过apache这个http服务器访问repository,协议当然就是http://了
[b]
3.建立repository资源库[/b]
从上面又可以看出,首先我们得先建立我们的repository,这样才能使用以上三种方式访问,这个repository是我们的关健资源库,所有的操作最后都是反映到这里来的.
首先建立这个repository
#svnadmin create /path/to/repository
这样在/path/to/repository下就会生成几个关健的文件夹:
比如conf, db,除了conf可以修改,其他文件,文件夹都不能随便修改删除等
conf下有svnserve.conf, authz, passwd这三个文件
这个文件夹下的配置文件是配置svnserve服务器的,跟其他另外两种访问方式无关.
svnserve.conf主要配置[general]下的东东,
比如 anon-access=none,auth-access=write 可以使匿名用户不能访问,而已验证的用户可以进行读写操作.
验证用户可以在 password-db = passwd说明,
这样在conf/passwd文件中定义的用户都是svnserve的用户.
在conf/passwd文件中定义用户很简单: 在[users]下一个用户一行,
格式 username = password(明文)
每个用户又有可能有不同的访问资源权限,比如小王不能访问buyshop这个项目的资源,而其他可以
在svnserve.conf 中的[general]注释掉authz-db = authz
这样conf/authz文件中定义的权限就会被应用.
具体实例参照authz文件本身,它有詳細说明
[b]4.启动svnserve[/b]
repository(版本库)建好了,svnserve配置文件修改好了,
现在是启动svnserve服务器的时候了
#svnserve -d -r /path/to/repository
这样就在后台启动了,从-r可以看出我们可以有不同的版本库,可以按需使用
[b]5.subversion的命令[/b]
subversion系统自带的工具有服务器端的如svnadmin,svnserve,
也有客户端的如使用最多的svn 命令,svn下面还有很多子命令
[b]6.上传项目[/b]
现在应该将我们的项目上传到subversion的repository供他们管理
项目的结构可以考虑trunk,branches,tags
#svn import . svn://server-ip/hello -m 'initial'
这样就将当前目录下的所有文件,文件夹上传到repository下的hello文件夹中
当我们需要使用由svn版本控制的项目文件,必须checkout到本地
#svn checkout svn://serveer-ip/hello/trunk hello
这样就将hello项目主线的文件下载到当前目录下的hello文件夹中
---------------------------------------------------------------------------------------
[b]7.客户端命令svn[/b]
当我们checkout出项目之后,进入到项目文件夹中,这个例子是当前目录下的hello文件夹
svn命令要在工作拷贝中(working copy)运行
#cd hello
我们可以离线操作本地项目文件,修改,增加,删除等等.
当确定修改完成,需要保留这些信息时,这才使用svn commit -m ''命令去跟服务器联系说我修改了哪些文件,给我这些改动状态一个版本号.
客户端commit一次,就将版本号加1,最开始import 时版本号为1
当我们完成一个项目或其他原因想将项目拿出来而不带版本信息,这时可用
#svn export svn://server-ip/hello/trunk hello_2
或可以指定版本号,默认是最新版本号 如 -r 1234
常用客户端命令:
1). svn add file/dir
eg: svn add --depth=empty otherdir (只增加otherdir文件夹)
svn add * --force 递归增加全部未加入版本控制的文件
2).svn cat url (查看版本库文件的内容而不checkout出来)
eg: svn svn://192.168.1.1/bz/readme.txt
3).svn changelist — Associate (or deassociate) local paths with a changelist.
svn cl issue12 foo.a foo.b(将foo.a, foo.b加入changelist可以方便以后commit)
svn commit --changelist issue12 -m 'fix issuse 12'
4).svn checkout — 从版本库取出一个工作拷贝
svn co $svn_url [path]
5).svn cleanup [path]— 递归清理工作拷贝
6).svn commit -m 'comment' [path] — 将修改从工作拷贝发送到版本库
7).svn copy SRC DST — 拷贝工作拷贝的一个文件或目录到版本库
SRC, DST可以是working copy, repository的自由组合
8).svn delete [PATH/URL] — 从工作拷贝或版本库删除一个项目
PATH指working copy下的路径, URL指repository的路径
9).svn diff — 比较两条路径的区别
10). svn export — 导出一个干净的目录树
svn export URL PATH
11). svn -m 'comment' import [PATH] URL — 递归提交一个路径的拷贝到版本库
如果PATH ommited, '.' is assumed
这个时候PATH并没有纳入版本控制, 需要checkout出来成为working copy
12). svn info [PATH/URL]— 显示本地或远程条目的信息
13). svn list — 列出版本库目录的条目
14). svn lock — 锁定版本库的工作拷贝路径或URL,所以没有其他用户可以提交这些文件的修改
svn lock jp.c
对应的 svn unlock
15). svn log — 显示提交日志信息
16). svn mkdir — 创建一个纳入版本控制的新目录
svn mkdir hello
svn mkdir -m 'f' URL
17). svn move SRC... DST — 移动一个文件或目录
18). svn resolve PATH...— Resolve conflicts on working copy files or directories
19). svn revert PATH... — 取消所有的本地编辑
20). svn status [PATH]— 打印工作拷贝文件和目录的状态
21). svn switch — 把工作拷贝更新到别的URL
svn switch URL[@PEGREV] [PATH]
svn switch --relocate FROM TO [PATH...]
22).svn update — 更新你的工作拷贝
-----------------------------------------------------------------
[b]8.服务器端的命令svnadmin, svnlook[/b]
在服务器端直接操作文件路经, 而不是URL
svnadmin is the administrative tool for monitoring and repairing your Subversion repository
1). svnadmin create REPOS_PATH — 创建一个新的空的版本库
[b]9.当上传eclipse项目工程到subversion中时,必须加上.project .classpath文件,再加上.settings文件夹[/b]
[b]10.relocate[/b]
subversion的库是可复制的, 当要将库移到另外的机器上, 需要relocate
cd到项目目录下
#svn switch --relocate FROM TO
如# svn switch --relocate svn://192.168.1.112/bidaround/trunk svn://192.168.1.223/bidaround/trunk
[/size]