跳转到内容

版本控制/Subversion

来自 Wikibooks,开放世界的开放书籍

Subversion 设计基于 CVS

Subversion 最初被设计成一个更好的 CVS,所以它拥有 CVS 的大部分功能。通常,Subversion 对特定功能的接口类似于 CVS 的接口,除非有令人信服的理由这样做。

Subversion 已经超越了其最初的目标,即取代 CVS,但其历史影响了其功能和接口的选择;今天的 Subversion 对于 CVS 用户来说应该仍然非常熟悉。


Subversion 贯穿示例:Windows XP

[编辑 | 编辑源代码]

贯穿示例:安装 Subversion 和 Subversion 工具

[编辑 | 编辑源代码]
  • 下载 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命令用于创建仓库。为了在这个例子中清楚地区分客户端或服务器,我们将创建两个目录serverclient. 例子中仓库的管理是在 server 目录中进行的,而客户端工作是在 client 目录中进行的。

svnadmin create repos

[编辑 | 编辑源代码]

本节介绍如何创建仓库。在 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,即还没有发生任何提交。

将文件添加到 Subversion 仓库

[编辑 | 编辑源代码]

如果您有一个现有的文件系统,您希望将其添加到版本控制中,有多种方法可以做到。

  • 使用svn import
  • 创建一个版本化的目录,然后提交它。
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>


客户端

[编辑 | 编辑源代码]

使用 Windows

[编辑 | 编辑源代码]

我们现在将从仓库签出 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

[编辑 | 编辑源代码]

本贯穿示例将向您展示如何将 Subversion 设置为一组命令行应用程序,以及如何设置 TortoiseSVN 客户端。

贯穿示例:多个工作者和冲突

[编辑 | 编辑源代码]

本贯穿示例将引导您完成一个用户,然后是两个用户使用仓库的过程。它将向您展示如何以及在何处更改文件的不同版本和目录。它接着展示冲突如何发生,以及如何解决它们。

先决条件

[编辑 | 编辑源代码]

要运行本贯穿示例,您需要安装以下内容

svn - Subversion 客户端 TortoiseSvn(可选)

本贯穿示例将执行以下步骤

  • 创建一个新的仓库。
  • Sam(用户 1)获取工作副本并提交一些更改。
  • Pat(用户 2)获取工作副本。
    • Sam 做出更改并提交。
    • Pat 做出更改并提交。
  • Pat 做出一些更改并提交。
    • Sam 更新他过时的工作副本。
  • Sam 和 Pat 做出一些更改,最终导致 Pat 发生冲突。
  • Pat 解决她的冲突。

在贯穿示例过程中,您可以使用 svn 命令行工具和 TortoiseSVN 查看更改。

贯穿示例:Subversion 管理

[编辑 | 编辑源代码]

本指南主要针对 Subversion 管理员。本指南将向您展示如何创建本地存储库并使用 file:// 模式访问它。相同的方法用于创建完整的存储库,但它们被配置为使用不同的模式访问,例如 svn:// 和 http:// 等。

华夏公益教科书