一、Subversion Repositories
subversion版本控制仓库(Repository)与其他版本控制系统并无区别。与工作副本不同之处在于,subversion repository是个抽象的实体,能够被subversion自己的工具和库几乎专有的操作。许多用户与subversion的交互都是基于工作副本,因此后续会着重介绍subversion中工作副本的操作。
二、Revisions

三、访问版本库
- http://svn.example.com/svn/project
- http://svn.example.com:9834/repos
Schema | Access method |
---|---|
file:/// | Direct repository access (on local disk) |
http:// | Access via WebDAV protocol to Subversion-aware Apache server |
https:// | Same as http:// , but with SSL encryption |
svn:// | Access via custom protocol to an svnserve server |
svn+ssh:// | Same as svn:// , but through an SSH tunnel |
- file:///var/svn/repos
- file://localhost/var/svn/repos
四、subversion的工作副本
一个subversion的工作副本是你的本地系统的普通的目录树,包含一批文件的集合。你可以随意编辑修改这些文件。工作副本是你的私人地盘,在你显示的commit之前,你的工作副本中不会融入其他人的修改,你对工作副本的修改对其他人也不可见。 当然,subversion提供了一系列的操作供你提交你的修改到版本库中,如果其他人已经提交了修改,则如前一篇文章中提到的,需要使用merge操作来写入你的修改到版本库中。此外,工作副本中还包含额外的一些文件,这些额外文件由subversion创建和维护。例如在每个工作副本目录下面都有一个.svn子目录,这是工作副本的管理目录。这个目录中的文件帮助subversion确认哪些版本文件的修改没有提交,哪些文件过时了等等。
五、工作副本的工作机制
- 工作文件基于哪一个revision
- 本地副本最后从版本库更新的时间戳记录
1)没有修改,且没有过时
2)本地修改,且没有过时
3)没有修改,且过时
4)本地修改,且过时
六、工作副本基本交互

$ 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 button.c integer.c .svn/ $
$ svn commit button.c -m "Fixed a typo in button.c." Sending button.c Transmitting file data . Committed revision 57. $如果项目有多人合作开发,则如果有其他人Sally与你同一时刻checkout出工作副本,则你对button.c做的修改不能为Sally所知晓,则为了保证自己工作副本保持最新,Sally可以使用svn update命令更新自己的工作副本。
$ pwd /home/sally/calc $ ls -A Makefile button.c integer.c .svn/ $ svn update Updating '.': U button.c Updated to revision 57. $
七、混合版本的工作副本
calc/
Makefile:4
integer.c:4
button.c:4
我们修改button.c文件,并用commit命令提交修改,则此时会变成:
calc/
Makefile:4
integer.c:4
button.c:5
假定这个时候,另一个合作者Sally修改了文件integer.c并提交生成版本6。则我们使用svn update命令保持我们的工作副本为最新的,则工作副本版本如下:
calc/
Makefile:6
integer.c:6
button.c:6
特别需要注意的一点是,subversion中commit和update是分开的。