`
韩悠悠
  • 浏览: 828424 次
  • 性别: 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高级操作 .........................

    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操作手册中文版网页格式

    2.3. Subversion 实战 2.3.1. 工作副本 2.3.2. 版本库的 URL 2.3.3. 修订版本 2.3.4. 工作副本怎样跟踪版本库 2.4. 摘要 3. 版本库 3.1. 创建版本库 3.1.1. 使用命令行工具创建版本库 3.1.2. 使用 ...

    TortoiseSVN和TortoiseMerge的中文帮助文档(chm格式)

    2.3. Subversion 实战 2.3.1. 工作副本 2.3.2. 版本库的 URL 2.3.3. 修订版本 2.3.4. 工作副本怎样跟踪版本库 2.4. 摘要 3. 版本库 3.1. 创建版本库 3.1.1. 使用命令行工具创建版本库 3.1.2. 使用 TortoiseSVN 创建...

    TortoiseSVN中文手册

    2.3. Subversion 实战 ..................................................... 9 2.3.1. 工作副本 ...................................................... 9 2.3.2. 版本库的 URL .................................

    TortoiseSVN中文教程

    8 Subversion 实战 ............................................................................................................................. 9 工作副本 .........................................

    TortoiseSVN

    2.3. Subversion 实战 ..................................................... 9 2.3.1. 工作副本 ...................................................... 9 2.3.2. 版本库的 URL .................................

    linux下安装及配置subversion edge

    linux下安装、配置subversion edge,在公司实战部署配置成功,特此记录,可以直接按步骤操作部署成功。

    PHP基于Web的subversion用户管理系统(源代码+lw).rar

    PHP基于Web的subversion用户管理系统(源代码+lw).rar

    C#开发Android应用实战_RAR.rar

    对于Android,Xamarin还包含了自己的UI生成器(对于iOS,则使用苹果Xcode的UI生成器),此外还集成了Git和Subversion。开发者可以使用Xamarin Studio在模拟器和真机上对移动应用进行测试和bug调试。Xamarin Studio...

    maven从入门到实战

    本文首先针对maven3.3.3 的版本构建普通Java 应用和Java Web 应用进行讲解。...接下来针对maven 与配置管理工具subversion 进行整合进行了详细介绍。最后针对一个具体项目应该按什么顺序去使用maven 进行说明。

    基于SpringCloud完整的微服务架构实战

    SpringCloudConfig-配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。Hystrix-熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对...

    SVN版本控制技术实战讲解视频课件

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同...

    C#开发Android应用实战-zip.zip

    对于Android,Xamarin还包含了自己的UI生成器(对于iOS,则使用苹果Xcode的UI生成器),此外还集成了Git和Subversion。开发者可以使用Xamarin Studio在模拟器和真机上对移动应用进行测试和bug调试。Xamarin Studio...

    基于TortoiseSVN的版本控制工具(与Delphi I

    1、TortoiseSVN实战使用介绍 http://xieyunc.blog.163.com/blog/static/136306012006112010209410 2、TortoiseSVN全面使用说明书:http://www.subversion.org.cn/tsvndoc/ 注:转载时请注明TortoiseSVN2IDE的...

    2018 猎豹网校 教程大全 资源难找赶紧保存吧

    VisualSVN Subversion[MP4] Visual C# 入门经典[MP4] VC++ MFC快速提高[MP4] VC++ MFC快速入门[MP4] VC++ MFC快速进阶[MP4] Unity 3D 游戏开发经典教程[MP4] Unity 3D 游戏高级教程[MP4] SQL Server 数据库...

Global site tag (gtag.js) - Google Analytics