`
韩悠悠
  • 浏览: 839995 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Subversion 实战

阅读更多

工作副本

你已经阅读过了关于工作副本的内容,现在我们要讲一讲客户端怎样建立和使用它。

一个 Subversion 工作副本是你本地机器一个普通的目录,保存着一些文件,你可以任意的编辑文件,而且如果是源代码文件,你可以像平常一样编译,你的工作副本是你的私有工作区,在你明确的做了特定操作之前,Subversion 不会把你的修改与其他人的合并,也不会把你的修改展示给别人。

After you've made some changes to the files in your working copy and verified that they work properly, Subversion provides you with commands to publish your changes to the other people working with you on your project (by writing to the repository). If other people publish their own changes, Subversion provides you with commands to merge those changes into your working directory (by reading from the repository).

一个工作副本也包括一些由 Subversion 创建并维护的额外文件,用来协助执行这些命令。通常情况下,你的工作副本每一个文件夹有一个以 .svn 为名的文件夹,也被叫做工作副本管理目录,这个目录里的文件能够帮助 Subversion 识别哪一个文件做过修改,哪一个文件相对于别人的工作已经过期了。

一个典型的 Subversion 的版本库经常包含许多项目的文件(或者说源代码),通常每一个项目都是版本库的子目录,在这种安排下,一个用户的工作副本往往对应版本库的的一个子目录。

举一个例子,你的版本库包含两个软件项目。

图 2.6. 版本库的文件系统

版本库的文件系统

换句话说,版本库的根目录包含两个子目录: paintcalc

To get a working copy, you must check out some subtree of the repository. (The term check out may sound like it has something to do with locking or reserving resources, but it doesn't; it simply creates a private copy of the project for you).

假定你修改了 button.c,因为 .svn 目录记录着文件的修改日期和原始内容,Subversion 可以告诉你已经修改了文件,然而,在你明确告诉它之前,Subversion 不会将你的改变公开。将改变公开的操作被叫做提交(或者是检入),它提交修改到版本库中。

发布你的修改给别人,可以使用 Subversion 的提交命令。

这时你对 button.c 的修改已经提交到了版本库,如果其他人取出了 /calc 的一个工作副本,他们会看到这个文件最新的版本。

设你有个合作者,Sally,她和你同时取出了 /calc 的一个工作副本,你提交了你对 button.c 的修改,Sally 的工作副本并没有改变,Subversion 只在用户要求的时候才改变工作副本。

要使项目最新,Sally 可以要求 Subversion 更新她的工作副本,通过使用更新命令,可以将你和所有其他人在她上次更新之后的修改合并到她的工作副本。

注意,Sally 不必指定要更新的文件,Subversion 利用 .svn 以及版本库的进一步信息决定哪些文件需要更新。

版本库的 URL

Subversion 可以通过多种方式访问-本地磁盘访问,或各种各样不同的网络协议,但一个版本库地址永远都是一个 URL,URL 方案反映了访问方法。

表 2.1. 版本库访问 URL

方案 访问方法
file:// 直接版本库访问(本地磁盘或者网络磁盘)。
http:// 通过 WebDAV 协议访问支持 Subversion 的 Apache 服务器。
https:// http:// 相似,但是用 SSL 加密。
svn:// 通过未认证的 TCP/IP 自定义协议访问 svnserve 服务器。
svn+ssh:// 通过认证并加密的 TCP/IP 自定义协议访问 svnserve 服务器。

For the most part, Subversion's URLs use the standard syntax, allowing for server names and port numbers to be specified as part of the URL. The file:// access method is normally used for local access, although it can be used with UNC paths to a networked host. The URL therefore takes the form file://hostname/path/to/repos. For the local machine, the hostname portion of the URL is required to be either absent or localhost. For this reason, local paths normally appear with three slashes, file:///path/to/repos.

Also, users of the file:// scheme on Windows platforms will need to use an unofficially “standard” syntax for accessing repositories that are on the same machine, but on a different drive than the client's current working drive. Either of the two following URL path syntaxes will work where X is the drive on which the repository resides:

file:///X:/path/to/repos
...
file:///X|/path/to/repos
...

注意 URL 使用普通的斜杠,而不是 Windows 本地(非 URL)形式的路径。

你可以安全的访问网络共享的 FSFS 版本库,但是你不能以这种方式访问 BDB 版本库。

警告

不要创建和访问网络共享上的 Berkeley DB 版本库,它不能存在于一个远程的文件系统,即使是映射到盘符的共享。如果你希望在网络共享使用 Berkeley DB,结果难以预料-你可能会立刻看到奇怪的错误,也有可能几个月之后才发现数据库已经损坏了。

修订版本

svn commit 操作可以作为一个原子事务操作发布任意数量文件和目录的修改。在你的工作副本中,你可以改变文件内容,创建、删除、改名和复制文件和目录,然后作为一个整体提交。

在版本库中,每次提交被当作一次原子事务操作: 要么所有的改变发生,要么都不发生,Subversion 努力保持原子性以应对程序错误、系统错误、网络问题和其他用户行为。

每当版本库接受了一个提交,文件系统进入了一个新的状态,叫做版本,每个版本被赋予一个独一无二的自然数,一个比一个大,初始修订号是 0,只创建了一个空目录,没有任何内容。

可以形象的把版本库看作一系列树,想象有一组版本号,从 0 开始,从左到右,每一个修订号有一个目录树挂在它下面,每一个树好像是一次提交后的版本库“快照”。

图 2.7. 版本库

版本库

需要特别注意的是,工作副本并不一定对应版本库中的单一版本,他们可能包含多个版本的文件。举个例子,你从版本库检出一个工作副本,最新的版本是 4:

calc/Makefile:4
     integer.c:4
     button.c:4

此刻,工作目录与版本库的版本 4 完全对应,然而,你修改了 button.c 并且提交之后,假设没有别的提交出现,你的提交会在版本库建立版本 5,你的工作副本会是这个样子的:

calc/Makefile:4
     integer.c:4
     button.c:5

假设此刻,Sally 提交了对 integer.c 的修改,建立修订版本 6,如果你使用 svn update 来更新你的工作副本,你会看到:

calc/Makefile:6
     integer.c:6
     button.c:6

Sally 对 integer.c 的改变会出现在你的工作副本,你对 button.c 的改变还在,在这个例子里,Makefile 在 4、5、6 版本都是一样的,但是 Subversion 会把 Makefile 的版本设为 6 来表明它是最新的,所以你在工作副本顶级目录作一次干净的更新,会使所有内容对应版本库的同一修订版本。

工作副本怎样跟踪版本库

对于工作副本的每一个文件,Subversion 在管理目录 .svn/ 记录两项关键的信息:

  • 工作文件的基准版本(叫做文件的工作版本)和

  • 一个本地副本最后更新的时间戳。

给定这些信息,通过与版本库通讯,Subversion 可以告诉我们工作文件是处与如下四种状态的那一种:

未修改且是当前的

文件在工作目录里没有修改,在工作版本之后没有修改提交到版本库。svn commit 操作不做任何事情,svn update 不做任何事情。

本地已修改且是当前的

工作副本已经修改,从基准版本之后没有修改提交到版本库。本地修改没有提交,因此 commit 会成功的提交,update 不做任何事情。

本地未修改且过时

这个文件在工作副本没有修改,但在版本库中已经修改了。这个文件应当更新到最新公共版本。commit 不做任何事情,update 将会更新工作副本到最新的版本。

本地已修改且过时

The file has been changed both in the working directory, and in the repository. A commit of the file will fail with an out-of-date error. The file should be updated first; an update command will attempt to merge the public changes with the local changes. If Subversion can't complete the merge in a plausible way automatically, it leaves it to the user to resolve the conflict.

分享到:
评论

相关推荐

    浪曦_深入浅出系列之二_SubVersion

    7 3 SubVersion实战 ............................................................................................................................... 18 4 SubVersion高级操作 .........................

    [资料][软件开发][版本控制][CVS][Version Control with Subversion].pdf

    #### 五、Subversion实战操作 - **初始化仓库**:使用`svnadmin create`命令创建一个新的版本库。 - **导入项目**:将现有的项目文件导入到版本库中。 - **版本号与日期**:每个提交都会有一个唯一的版本号和对应的...

    subversion-TortoiseSVN-使用手册(CHM+HTML,中英完整版)

    2.3. Subversion实战 2.3.1. 工作拷贝 2.3.2. 修订版本 2.3.3. 工作拷贝怎样追踪版本库 2.4. 摘要 3. 配置服务器 3.1. 以Apache为基础的服务器 3.1.1. 简介 3.1.2. 安装Apache 3.1.3. 安装Subversion 3.1.4. 配置 ...

    SVN使用手册中文版快速入门

    Subversion实战 工作拷贝 修订版本 工作拷贝怎样追踪版本库 修订版本混合的限制 摘要 3. 指导教程 帮助! 导入 修订版本: 号码、关键字和日期,噢,我的! 修订版本号 修订版本关键字 修订版本日期 初始化的Checkout...

    SVN使用手册中文版.chm

    Subversion实战 工作拷贝 修订版本 工作拷贝怎样追踪版本库 修订版本混合的限制 摘要 3. 指导教程 帮助! 导入 修订版本: 号码、关键字和日期,噢,我的! 修订版本号 修订版本关键字 修订版本日期 初始化的Checkout...

    svn-book.pdf

    3. **Subversion 实战应用:** - **仓库 URL:** 指定仓库的位置,用于与仓库交互。 - **工作副本 (Working Copies):** 用户本地的文件夹,从仓库中检出,用于日常开发。 - **版本 (Revisions):** 仓库中的每一...

    TortoiseSVN-1.8.8使用手册(中文版)

    - **Subversion实战**: - **工作副本(Working Copy)**:本地的副本,用于进行开发和修改。 - **版本库URL**:指向版本库的网络地址。 - **修订版本(Revision)**:每次提交都会产生一个修订版本号,用于标识...

    TortoiseSVN中文手册.pdf

    - 掌握Subversion实战中的工作副本、版本库URL、修订版本等核心概念。 - 掌握如何配置服务器,包括基于Apache的服务器和基于svnserve的服务器的安装、运行以及相关配置。 3. 版本库操作 - 学习如何创建版本库,...

    svn版本控制器的使用

    - **Subversion实战**:工作拷贝是用户本地的工作空间,每个工作拷贝都有自己的修订版本,能追踪版本库的最新变化。 **3. 配置服务器** - **Apache基础服务器**:提供HTTP/HTTPS协议访问,支持多版本库、路径授权和...

    TortoiseSVN中文帮助手册.pdf

    - **Subversion实战:** - 工作副本(Working Copy):本地副本,供用户修改。 - 修订版本(Revision):每次提交都会产生一个新的修订版本号。 #### 四、服务器配置 - **基于Apache的服务器:** - **简介:**...

    TortoiseSVN中文手册

    2.3 Subversion实战 Subversion在实际操作中涉及到工作副本的概念,这指的是从版本库中检出的一份文件的副本。在本地对副本进行修改后,可以将这些修改提交回版本库。 2.4 摘要 TortoiseSVN的功能涵盖了从版本库的...

    TortoiseSVN-1.6.14-zh_CN 

    ##### 2.3 Subversion实战 - **2.3.1 工作副本**:本地计算机上的一个副本,用户在此进行开发工作。 - **2.3.2 版本库的URL**:指向版本库的地址,用于检出和提交。 - **2.3.3 修订版本**:每个文件或目录都有唯一...

    TortoiseSVN-1.6.16-zh_CN中文帮助

    **2.3 Subversion实战** - **工作副本**:用户本地计算机上的一个副本,用于实际的开发工作。 - **版本库的URL**:指定版本库的位置。 - **修订版本**:每次对版本库的更改都会生成一个新的修订版本号。 - **工作...

Global site tag (gtag.js) - Google Analytics