Subversion(SVN)使用入门
SVN是集中式的信息共享系统。它使用拷贝-修改-合并 方案来解决文件共享问题。其中服务端的SVN文件库称为版本库。
Subversion版本库URL
file:/// 直接版本库访问(本地磁盘)
http:// 通过配置Subversion的Apache服务器的WebDAV协议
https:// 与http://相似,但是包括SSL加密。
svn:// 通过svnserve服务自定义的协议
svn+ssh:// 与svn://相似,但通过SSH封装。
若URL中包含空格或ASCII大于128的字符需要加上双引号。
SVN使用
首先需要将服务器上的项目文件拷贝到本地,使用checkout参数:
$ svn checkout http://svn.example.com/repos/calc
A calc/Makefile
A calc/integer.c
A calc/button.c
Checked out revision 56.
$ ls -A calc
Makefile integer.c button.c .svn/
附加目录.svn/保存了SVN需要的一些信息。
修改文件之后可以使用commit参数提交修改:
$ svn commit button.c -m "Fixed a typo in button.c."
Sending button.c
Transmitting file data .
Committed revision 57.
如果需要将服务器上文件的变化同步到本地,可使用update参数:
$ pwd
/home/sally/calc
$ ls -A
.svn/ Makefile integer.c button.c
$ svn update
U button.c
Updated to revision 57.
版本库每次接受新的提交则进入一个新的状态,称为一次修订。每个修订都是一个文件树的快照。修订是针对整个目录树的,版本号从0空目录开始。
在与版本库比较后本地工作文件可能处于以下四种状态之一:
未修改且是当前的
文件在工作目录里没有修改,在工作修订版本之后没有修改提交到版本库。svn commit操作不做任何事情,svn update不做任何事情。
本地已修改且是当前的
**在工作目录已经修改,从基本修订版本之后没有修改提交到版本库。本地修改没有提交,因此svn commit会成功提交,svn update不做任何事情。
未修改且不是当前的了
**这个文件在工作目录没有修改,但在版本库中已经修改了。这个文件最终将更新到最新版本,成为当时的公共修订版本。svn commit不做任何事情,svn update将会取得最新的版本到工作拷贝。
本地已修改且不是最新的
**这个文件在工作目录和版本库都得到修改。一个svn commit将会失败,这个文件必须首先更新,svn update命令会合并公共和本地修改,如果Subversion不可以自动完成,将会让用户解决冲突。
svn status可以告诉你当前工作文件的状态。以下为四种返回状态码:
A item
- 预定加入到版本库的文件、目录或符号链的item。
C item
- 文件item发生冲突,在从服务器更新时与本地版本发生交迭,在你提交到版本库前,必须手工的解决冲突。
D item
- 文件、目录或是符号链item预定从版本库中删除。
M item
- 文件item的内容被修改了。
基本的工作周期
典型的工作周期是这样的:
更新你的工作拷贝
- svn update
做出修改
svn add
svn delete
svn copy
svn move
检验修改
svn status
svn diff
可能会取消一些修改
- svn revert
解决冲突(合并别人的修改)
svn update
svn resolved
提交你的修改
- svn commit