版本控制/Subversion
的 Subversion 设计基于 CVS
Subversion 最初被设计成一个更好的 CVS,所以它拥有 CVS 的大部分功能。通常,Subversion 对特定功能的接口类似于 CVS 的接口,除非有令人信服的理由这样做。
Subversion 已经超越了其最初的目标,即取代 CVS,但其历史影响了其功能和接口的选择;今天的 Subversion 对于 CVS 用户来说应该仍然非常熟悉。
- 下载 msi svn-1.4.6-setup.exe
- 运行 msi
Subversion 由多个组件组成。在这里,我们将检查三个组件的安装
- svn
- svnadmin
- svnlook
- 打开命令提示符。
C:\>svn --version
svn, version 1.4.5 (r25188)
compiled Aug 22 2007, 20:49:04
Copyright (C) 2000-2006 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).
The following repository access (RA) modules are available:
* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.
- handles 'http' scheme
- handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
- handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
- handles 'file' scheme
C:\>svnadmin --version
svnadmin, version 1.4.5 (r25188)
compiled Aug 22 2007, 20:49:04
Copyright (C) 2000-2006 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).
The following repository back-end (FS) modules are available:
* fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.
C:\>svnlook --version
svnlook, version 1.4.5 (r25188)
compiled Aug 22 2007, 20:49:04
Copyright (C) 2000-2006 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).
The following repository back-end (FS) modules are available:
* fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.
C:\>
Thesvnadmin create命令用于创建仓库。为了在这个例子中清楚地区分客户端或服务器,我们将创建两个目录server和client. 例子中仓库的管理是在 server 目录中进行的,而客户端工作是在 client 目录中进行的。
本节介绍如何创建仓库。在 Subversion 的日常使用中,这只是一项您不会经常执行的任务。对于尝试新的想法,了解如何设置一个简单的仓库非常有用。要创建仓库,您需要使用 svnadmin 命令。
C:\>svnadmin help create
create: usage: svnadmin create REPOS_PATH
Create a new, empty repository at REPOS_PATH.
Valid options:
--bdb-txn-nosync : disable fsync at transaction commit [Berkeley DB]
--bdb-log-keep : disable automatic log file removal [Berkeley DB]
--config-dir arg : read user configuration files from directory ARG
--fs-type arg : type of repository: 'fsfs' (default) or 'bdb'
--pre-1.4-compatible : use format compatible with Subversion versions
earlier than 1.4
首先创建 server 目录并进入该目录。
C:\WB>MD server
C:\WB>CD server
在 repos 目录中创建一个仓库。
C:\WB\server>svnadmin create repos
C:\WB\server>
我们现在可以查看仓库的标准目录结构。
C:\WB\server>DIR repos
Volume in drive C is MyCDrive
Volume Serial Number is 64A5-9C22
Directory of C:\WB\server\repos
09/01/2009 14:27 <DIR> .
09/01/2009 14:27 <DIR> ..
09/01/2009 14:27 <DIR> conf
09/01/2009 14:27 <DIR> dav
09/01/2009 14:27 <DIR> db
09/01/2009 14:27 2 format
09/01/2009 14:27 <DIR> hooks
09/01/2009 14:27 <DIR> locks
09/01/2009 14:27 234 README.txt
2 File(s) 236 bytes
7 Dir(s) 146,102,767,616 bytes free
C:\WB\server>
svnlook 是 Subversion 实用程序的一部分。它提供了一种查看仓库的方法,而不会改变仓库的任何内容。
C:\WB>svnlook youngest server\repos
0
C:\WB>
这表明仓库在修订版 0,即还没有发生任何提交。
如果您有一个现有的文件系统,您希望将其添加到版本控制中,有多种方法可以做到。
- 使用svn import
- 创建一个版本化的目录,然后提交它。
svn import可用于将未版本化的目录导入 Subversion。导入后,目录仍然未版本化。要使用版本化的目录副本进行工作,需要从仓库签出它。
C:\WB>svn help import
import: Commit an unversioned file or tree into the repository.
usage: import [PATH] URL
Recursively commit a copy of PATH to URL.
If PATH is omitted '.' is assumed.
Parent directories are created as necessary in the repository.
If PATH is a directory, the contents of the directory are added
directly under URL.
Valid options:
-q [--quiet] : print as little as possible
-N [--non-recursive] : operate on single directory only
--auto-props : enable automatic properties
--no-auto-props : disable automatic properties
-m [--message] arg : specify log message ARG
-F [--file] arg : read log message from file ARG
--force-log : force validity of log message source
--editor-cmd arg : use ARG as external editor
--encoding arg : treat value as being in charset encoding ARG
--no-ignore : disregard default and svn:ignore property ignores
--username arg : specify a username ARG
--password arg : specify a password ARG
--no-auth-cache : do not cache authentication tokens
--non-interactive : do no interactive prompting
--config-dir arg : read user configuration files from directory ARG
在 Subversion 中设置项目的标准方法是使用以下结构
project
+--- branches
+--- tags
+--- trunk
我们将在本例中遵循此结构。首先,我们创建一个临时目录来导入。
C:\WB>MKDIR temp
C:\WB>cd temp
C:\WB\temp>MKDIR branches tags trunk
C:\WB\temp>cd ..
现在我们将此结构导入仓库。使用 -m 选项为仓库中的每个更改提供消息是良好的做法。在许多仓库中,服务器强制要求提供提交消息。
C:\WB>svn import temp file:///C:/WB/server/repos/ -m "Initial set up."
Adding temp\trunk
Adding temp\branches
Adding temp\tags
Committed revision 1.
C:\WB>
我们不会在这些贯穿示例中使用太多svnlook但以下展示了svnlook youngest命令的使用。这是一个服务器端命令。
C:\WB>svnlook youngest server\repos
1
C:\WB>
现在我们已经导入了 temp 目录,我们删除它。
C:\WB>RMDIR /S temp
temp, Are you sure (Y/N)? y
C:\WB>
我们现在将从仓库签出 trunk 并开始处理它。
C:\WB\server>CD ..
C:\WB>MD client
C:\WB>CD client
C:\WB\client>
您现在可以从仓库签出 trunk 到您的客户端工作区。
C:\WB>svn co file:///C:/WB/server/repos/trunk client\trunk
Checked out revision 1.
C:\WB>
C:\WB>cd client
C:\WB\client>
C:\WB\client>DIR /A trunk
Volume in drive C is PROGRAMS
Volume Serial Number is 64A5-9C22
Directory of C:\WB\client\trunk
23/02/2009 10:12 <DIR> .
23/02/2009 10:12 <DIR> ..
23/02/2009 10:12 <DIR> .svn
0 File(s) 0 bytes
3 Dir(s) 145,724,104,704 bytes free
C:\WB\client>
可以看到,在.svn目录中有一个trunk目录。
接下来,我们进入客户端 trunk 目录。查看目录的状态,然后查看目录的更详细状态。
C:\WB\client>CD trunk
C:\WB\client\trunk>svn status
C:\WB\client\trunk>svn status -v
1 1 CozensJ .
您可以使用svn info命令找出目录的版本化位置。
C:\WB\client\trunk>svn info
Path: .
URL: file:///C:/WB/server/repos/trunk
Repository Root: file:///C:/WB/server/repos
Repository UUID: 81664a5f-b906-8c41-a38a-d61973a1aa89
Revision: 1
Node Kind: directory
Schedule: normal
Last Changed Author: CozensJ
Last Changed Rev: 1
Last Changed Date: 2009-02-23 09:46:43 +0000 (Mon, 23 Feb 2009)
我们现在继续使用菜单示例。打开记事本并创建文件 “menu.txt”。
C:\WB\client\trunk>notepad menu.txt
现在检查状态显示 menu.txt 对 Subversion 来说是一个未知文件。
C:\WB\client\trunk>svn status
? menu.txt
C:\WB\client\trunk>svn add menu.txt
A menu.txt
C:\WB\client\trunk>svn status
A menu.txt
C:\WB\client\trunk>svn staus -v
Unknown command: 'staus'
Type 'svn help' for usage.
C:\WB\client\trunk>svn status -v
1 1 CozensJ .
A 0 ? ? menu.txt
C:\WB\client\trunk>svn diff
Index: menu.txt
===================================================================
C:\WB\client\trunk>svn diff
Index: menu.txt
===================================================================
--- menu.txt (revision 0)
+++ menu.txt (revision 0)
@@ -0,0 +1,11 @@
+[Date]
+Monday 5th January 2009
+
+[Starters]
+Starter of the day.
+
+[Main]
+Dish of the day.
+
+[Desserts]
+Creme Brulee
C:\WB\client\trunk>
本贯穿示例将向您展示如何将 Subversion 设置为一组命令行应用程序,以及如何设置 TortoiseSVN 客户端。
本贯穿示例将引导您完成一个用户,然后是两个用户使用仓库的过程。它将向您展示如何以及在何处更改文件的不同版本和目录。它接着展示冲突如何发生,以及如何解决它们。
要运行本贯穿示例,您需要安装以下内容
svn - Subversion 客户端 TortoiseSvn(可选)
本贯穿示例将执行以下步骤
- 创建一个新的仓库。
- Sam(用户 1)获取工作副本并提交一些更改。
- Pat(用户 2)获取工作副本。
- Sam 做出更改并提交。
- Pat 做出更改并提交。
- Pat 做出一些更改并提交。
- Sam 更新他过时的工作副本。
- Sam 和 Pat 做出一些更改,最终导致 Pat 发生冲突。
- Pat 解决她的冲突。
在贯穿示例过程中,您可以使用 svn 命令行工具和 TortoiseSVN 查看更改。
本指南主要针对 Subversion 管理员。本指南将向您展示如何创建本地存储库并使用 file:// 模式访问它。相同的方法用于创建完整的存储库,但它们被配置为使用不同的模式访问,例如 svn:// 和 http:// 等。