`
zhengdl126
  • 浏览: 2542468 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

svn手册摘录

    博客分类:
  • svn
 
阅读更多

一、版本库访问URL

模式 访问方法
file:/// 直接版本库访问(本地磁盘)。
http:// 通过配置Subversion的Apache服务器的WebDAV协议。
https:// 与http://相似,但是包括SSL加密。
svn:// 通过svnserve服务自定义的协议。
svn+ssh:// 与svn://相似,但通过SSH封装。


二、修订版本关键字
HEAD
版本库中最新的版本。

BASE
工作拷贝中的“原始”修订版本。

COMMITTED
在BASE版本之前(或在Base)一个项目最后修改的版本。

PREV
一个项目最后修改版本之前的那个版本(技术上为COMMITTED -1)。

PREV、BASE、和COMMITTED指的都是本地路径而不是URL

三、修订版本日期
在任何你使用特定版本号和版本关键字的地方,你也可以在“{}”中使用日期,你也可通过日期或者版本号配合使用来访问一段时间的修改!
如下是一些Subversion能够接受的日期格式,注意在日期中有空格时需要使用引号。

$ svn checkout --revision {2002-02-17}
$ svn checkout --revision {15:30}
$ svn checkout --revision {15:30:00.200000}
$ svn checkout --revision {"2002-02-17 15:30"}
$ svn checkout --revision {"2002-02-17 15:30 +0230"}
$ svn checkout --revision {2002-02-17T15:30}
$ svn checkout --revision {2002-02-17T15:30Z}
$ svn checkout --revision {2002-02-17T15:30-04:00}
$ svn checkout --revision {20020217T1530}
$ svn checkout --revision {20020217T1530Z}
$ svn checkout --revision {20020217T1530-0500}

当你指定一个日期,Subversion会在版本库找到接近这个日期的最新版本

你可以使用时间段,Subversion会找到这段时间的所有版本
$ svn log --revision {2002-11-20}:{2002-11-29}

我们也曾经指出,你可以混合日期和修订版本号
$ svn log --revision {2002-11-20}:4040

四、初始化的checkout

大多数时候,你会使用checkout从版本库取出一个新拷贝开始使用Subversion,这样会在本机创建一个项目的本地拷贝,这个拷贝包括版本库中的HEAD(最新的)版本
$ svn checkout http://svn.collab.net/repos/svn/trunk

通过输入特定URL取出任意深度的子目录
$ svn checkout http://svn.collab.net/repos/svn/trunk/doc/book/tools

在版本库URL之后指定一个目录,这样会将你的工作目录放到你的新目录,举个例子:
$ svn checkout http://svn.collab.net/repos/svn/trunk subv
这样将把你的工作拷贝放到subv而不是和前面那样放到trunk

五、svn status可能返回的状态码

L    abc.c               # svn已经在.svn目录锁定了abc.c
M      bar.c               # bar.c的内容已经在本地修改过了
 M     baz.c               # baz.c属性有修改,但没有内容修改
X      3rd_party           # 这个目录是外部定义的一部分
      foo.o               # svn并没有管理foo.o
!      some_dir            # svn管理这个,但它可能丢失或者不完整
~      qux                 # 作为file/dir/link进行了版本控制,但类型已经改变
I      .screenrc           # svn不管理这个,配置确定要忽略它
A  +   moved_dir           # 包含历史的添加,历史记录了它的来历
M  +   moved_dir/README    # 包含历史的添加,并有了本地修改
D      stuff/fish.c        # 这个文件预定要删除
A      stuff/loot/bloo.h   # 这个文件预定要添加
C      stuff/loot/lump.c   # 这个文件在更新时发生冲突
R      xyz.c               # 这个文件预定要被替换
    S  stuff/squawk        # 这个文件已经跳转到了分支

svn status也有一个--verbose(-v)选项,它可以显示工作拷贝中的所有项目,即使没有改变过
$ svn status --verbose

上面所有的svn status调用并没有联系版本库,只是与.svn中的元数据进行比较的结果,最后,是--show-updates(-u)参数,它将会联系版本库为已经过时的数据添加新信息:
$ svn status --show-updates --verbose
M      *        44        23    sally     README
M               44        20    harry     bar.c
       *        44        35    harry     stuff/trout.c
D               44        19    ira       stuff/fish.c
A                0                      stuff/things/bloo.h
Status against revision:   46

这三个命令(svn status、svn diff和 svn revert)都可以在没有网络的情况下工作


六、解决冲突

我们可以使用svn status -u来预测冲突
$ svn update
U  INSTALL
G  README
C  bar.c
Updated to revision 46
C表示冲突,说明服务器上的改动同你的改动冲突了,你需要自己手工去解决

如果你遇到冲突,三件事你可以选择:

1,“手动”合并冲突文本(检查和修改文件中的冲突标志)。
小于号、等于号和大于号串是冲突标记,并不是冲突的数据,你一定要确定这些内容在下次提交之前得到删除,前两组标志中间的内容是你在冲突区所做的修改
修改完毕,并去掉表示的符号
$ svn resolved sandwich.txt
$ svn commit -m "Go ahead and use my sandwich, discarding Sally's edits."

2,用某一个临时文件覆盖你的工作文件。
$ cp sandwich.txt.r2 sandwich.txt
$ svn resolved sandwich.txt

3,运行svn revert <filename>来放弃所有的修改。

七、提交修改

svn commit命令发送所有的修改到版本库,当你提交修改时,你需要提供一些描述修改的日志信息,你的信息会附到这个修订版本上,如果信息很简短,你可以在命令行中使用--message(-m)选项
$ svn commit --message "Corrected number of cheese slices."
Sending        sandwich.txt
Transmitting file data .
Committed revision 3.

如果你把写日志信息当作工作的一部分,你也许会希望通过告诉Subversion一个文件名得到日志信息,使用--file选项:
$ svn commit --file logmsg
Sending        sandwich.txt
Transmitting file data .
Committed revision 4.


八、检验历史

svn log 展示给你主要信息:附加在版本上的日志信息和所有版本的路径修改。

svn diff
1,检查本地修改
不使用任何参数调用时,svn diff将会比较你的工作文件与缓存在.svn的“原始”拷贝

2,比较工作拷贝与版本库
如果传递一个--revision(-r)参数,你的工作拷贝会与指定的版本比较。
$ svn diff --revision 3 rules.txt

3,比较版本库和版本库
如果通过--revision (-r)传递两个版本号,通过冒号分开,这两个版本会进行比较
$ svn diff --revision 2:3 rules.txt

你不仅可以用svn diff比较你工作拷贝中的文件,你甚至可以通过提供一个URL参数来比较版本库中两个文件的的区别,通常在本地机器没有工作拷贝时非常有用

svn cat 如果你只是希望检查一个过去的版本而不希望察看它们的区别,使用svn cat

svn list可以在不下载文件到本地目录的情况下来察看目录中的文件
$ svn list http://svn.collab.net/repos/svn
如果你希望察看详细信息,你可以使用--verbose (-v)参数
$ svn list --verbose http://svn.collab.net/repos/svn

九、其他命令

svn cleanup 查找工作拷贝中的所有遗留的日志文件,删除进程中的锁

svn import命令是拷贝用户的一个未被版本化的目录树到版本库最快的方法
$ svnadmin create /usr/local/svn/newrepos
$ svn import mytree file:///usr/local/svn/newrepos/some/project
Adding         mytree/foo.c
Adding         mytree/bar.c
Adding         mytree/subdir
Adding         mytree/subdir/quux.h

Committed revision 1.

将会拷贝目录mytree到版本库的some/project
$ svn list file:///usr/local/svn/newrepos/some/project
bar.c
foo.c
subdir/

===============================================================================================

分支与合并

一、建立分支

建立分支最简单的方法:svn copy可以直接对两个URL操作

$ svn copy http://svn.example.com/repos/calc/trunk \
           http://svn.example.com/repos/calc/branches/my-calc-branch \
      -m "Creating a private branch of /calc/trunk."

Committed revision 341.

二、拷贝特定的修改

查看区别
$ svn diff -r 343:344 http://svn.example.com/repos/calc/trunk

svn merge命令几乎完全相同,但不是打印区别到你的终端,它会直接作为本地修改作用到你的本地拷贝
$ svn merge -r 343:344 http://svn.example.com/repos/calc/trunk
U  integer.c

$ svn status
M  integer.c

当你提交你的修改时,确定你的日志信息中说明你是从某一版本搬运了修改
$ svn commit -m "integer.c: ported r344 (spelling fixes) from trunk."

svn merge这个命令包括三个参数:

1,初始的版本树(通常叫做比较的左边),
2,最终的版本树(通常叫做比较的右边),
3,一个接收区别的工作拷贝(通常叫做合并的目标)。

svn merge的语法允许非常灵活的指定参数
$ svn merge http://svn.example.com/repos/branch1@150 \
            http://svn.example.com/repos/branch2@212 \
            my-working-copy
$ svn merge -r 100:200 http://svn.example.com/repos/trunk my-working-copy
$ svn merge -r 100:200 http://svn.example.com/repos/trunk
第一种语法使用URL@REV的形式直接列出了所有参数,
第二种语法可以用来作为比较同一个URL的不同版本的简略写法,
最后一种语法表示工作拷贝是可选的,如果省略,默认是当前目录。

三、预览合并

$ svn merge --dry-run -r 343:344 http://svn.example.com/repos/calc/trunk
U  integer.c

$ svn status
#  nothing printed, working copy is still unchanged.

--dry-run选项实际上并不修改本地拷贝,它只是显示实际合并时的状态信息,对于得到“整体”的印象,这个命令很有用,因为svn diff包括太多细节


四、常见用例

查 找分支产生的版本(分支的“基准”)的最好方法是在svn log中使用--stop-on-copy选项,log子命令通常会显示所有关于分支的变化,包括 创建分支的过程,就好像你在主干上一样,--stop-on-copy会在svn log检测到目标拷贝或者改名时中止日志输出
$ svn log --verbose --stop-on-copy \
          http://svn.example.com/repos/calc/branches/my-calc-branch

------------------------------------------------------------------------
r341 | user | 2002-11-03 15:27:56 -0600 (Thu, 07 Nov 2002) | 2 lines
Changed paths:
   A /calc/branches/my-calc-branch (from /calc/trunk:340)

$
如下是最终的合并过程,然后
$ cd calc/trunk
$ svn update
At revision 405.

$ svn merge -r 341:405 http://svn.example.com/repos/calc/branches/my-calc-branch
U   integer.c
U   button.c
U   Makefile

$ svn status
M   integer.c
M   button.c
M   Makefile

# ...examine the diffs, compile, test, etc...

$ svn commit -m "Merged my-calc-branch changes r341:405 into the trunk."
Sending        integer.c
Sending        button.c
Sending        Makefile
Transmitting file data ...
Committed revision 406.

五、取消修改
svn merge另一个常用的做法是取消已经做得提交
$ svn merge -r 303:302 http://svn.example.com/repos/calc/trunk
U  integer.c

$ svn status
M  integer.c

$ svn diff

# verify that the change is removed


$ svn commit -m "Undoing change committed in r303."
Sending        integer.c
Transmitting file data .
Committed revision 350.


六、找回删除的项目

一个好的策略是使用svn log --verbose来察看你删除的项目,--verbose选项显示所有改变的项目的每一个版本 ,你只需要找出你删除文件或目录的那一个版本

svn copy命令,精确的拷贝版本和路径“坐标对”到你的工作拷贝
$ svn copy --revision 807 \
           http://svn.example.com/repos/calc/trunk/real.c ./real.c

$ svn status
A  +   real.c

$ svn commit -m "Resurrected real.c from revision 807, /calc/trunk/real.c."
Adding         real.c
Transmitting file data .
Committed revision 1390.

七、发布分支

这是版本控制可以做的帮助,典型的过程如下:

开发者提交所有的新特性到主干。 每日的修改提交到/trunk:新特性,bug修正和其他。

这个主干被拷贝到“发布”分支。 当小组认为软件已经做好发布的准备(如,版本1.0)然后/trunk会被拷贝到/branches/1.0。

项目组继续并行工作,一个小组开始对分支进行严酷的测试,同时另一个小组在/trunk继续新的工作(如,准备2.0),如果一个bug在任何一个位置被发现,错误修正需要来回运送。然而这个过程有时候也会结束,例如分支已经为发布前的最终测试“停滞”了。

分支已经作了标签并且发布,当测试结束,/branches/1.0作为引用快照已经拷贝到/tags/1.0.0,这个标签被打包发布给客户。

分支多次维护。当继续在/trunk上为版本2.0工作,bug修正继续从/trunk运送到/branches/1.0,如果积累了足够的bug修正,管理部门决定发布1.0.1版本:拷贝/branches/1.0到/tags/1.0.1,标签被打包发布。

整个过程随着软件的成熟不断重复:当2.0完成,一个新的2.0分支被创建,测试、打标签和最终发布,经过许多年,版本库结束了许多版本发布,进入了“维护”模式,许多标签代表了最终的发布版本。

八、转换工作拷贝

svn switch命令改变存在的工作拷贝到另一个分支
$ svn info | grep URL
URL: http://svn.example.com/repos/calc/trunk

$ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch
U   integer.c
U   button.c
U   Makefile
Updated to revision 341.

$ svn info | grep URL
URL: http://svn.example.com/repos/calc/branches/my-calc-branch

九、版本库布局

如果一个版本库只是存放一个项目,人们会在顶级目录创建这些目录:
/trunk
/branches
/tags

如果一个版本库保存了多个项目,管理员会通过项目来布局
/paint/trunk
/paint/branches
/paint/tags
/calc/trunk
/calc/branches
/calc/tags

十、数据的生命周期

假定你最终完成了calc项目你的个人分支上的所有工作,在合并了你的所有修改到/calc/trunk后,没有必要继续保留你的私有分支目录

$ svn delete http://svn.example.com/repos/calc/branches/my-calc-branch \
             -m "Removing obsolete branch of calc project."

Committed revision 375.

如果浏览你删除的目录还不足够,你可以把它找回来,恢复数据对Subversion来说很简单,如果你希望恢复一个已经删除的目录(或文件)到HEAD,仅需要使用svn copy -r来从旧的版本拷贝出来
$ svn copy -r 374 http://svn.example.com/repos/calc/branches/my-calc-branch \
                  http://svn.example.com/repos/calc/branches/my-calc-branch

分享到:
评论

相关推荐

    SVN中文手册 SVN中文手册

    SVN svn SVN中文手册 SVN资料 svn配置SVN svn SVN中文手册 SVN资料 svn配置SVN svn SVN中文手册 SVN资料 svn配置SVN svn SVN中文手册 SVN资料 svn配置SVN svn SVN中文手册 SVN资料 svn配置SVN svn SVN中文手册 SVN...

    svn-book svn手册

    ### Subversion (SVN) 手册:版本控制与高级主题详解 #### 一、Subversion简介 **Subversion**(简称SVN)是一种广泛使用的版本控制系统,它可以帮助团队管理和跟踪项目的开发过程中的变更历史。《Version Control...

    SVN手册 For Subversion 1.7

    ### SVN 手册 For Subversion 1.7 相关知识点 #### 一、版本控制系统 Subversion (SVN) 概览 ##### 1.1 版本控制基础 版本控制是软件开发过程中的一项基本技术,它允许团队成员在不影响他人工作的前提下独立地...

    SVN手册文档 pdf.zip

    这个"SVN手册文档 pdf.zip"包含了关于SVN的详细使用指南,对于理解和掌握SVN操作至关重要。 **一、SVN的基本概念** 1. **仓库(Repository)**:是SVN存储所有文件和版本历史的地方,类似于一个中央数据库。 2. **...

    SVN1.9 英文手册

    SVN1.9 英文手册,来自官方安装包

    svn使用手册

    ### SVN使用手册知识点详解 #### 一、安装说明 **Subversion (SVN)** 是一款广泛应用的版本控制系统,尤其在软件开发领域中占有重要地位。本文档将详细讲解如何在Windows环境下安装配置SVN服务器及客户端,并进行...

    svn手册 htm 文件

    svn手册 htm 文件svn手册 htm 文件

    eclipse SVN学习手册

    Eclipse SVN学习手册是针对开发者如何在Eclipse集成开发环境中使用Subversion(SVN)进行版本控制的详尽指南。Subversion是一款广泛使用的开源版本控制系统,它帮助开发者管理项目源代码,跟踪更改,并协同团队工作...

    SVN 操作手册

    **SVN 操作手册** **一、Export 和 SVN Checkout** `Export` 和 `SVN Checkout` 是 SVN(Subversion)中的两种主要操作,用于获取远程仓库的代码。 1. **Export**:此操作用于下载源代码,但不会创建一个工作副本...

    SVN使用手册大全

    SVN 使用手册大全 SVN(Subversion)是一款开源的版本控制系统,广泛应用于软件开发、文档管理和项目协作等领域。本手册将详细介绍 SVN 的使用方法和技巧,帮助读者快速掌握 SVN 的使用。 修改 SVN 访问密码 在...

    linux下svn使用手册

    在linux下的svn英文版使用手册,包括一些常用命令和基本操作

    svn手册(詳細介绍pdf,客户端/服务器端使用手册)

    首先,`svn-book.pdf` 是一份详尽的SVN官方参考手册,它涵盖了SVN的所有核心功能和高级用法。这份手册通常会解释SVN的工作原理,包括如何创建仓库,如何克隆仓库,如何提交更改,如何解决冲突,以及如何使用分支和...

    SVN使用手册word打印版

    SVN使用手册word打印版 本手册是关于SVN(Subversion)的使用手册,旨在帮助初学者快速了解SVN的基本原理和使用方法。通过阅读本手册,读者可以学习如何使用SVN实现版本控制,了解基本的菜单操作,并且结合...

    SVN安装配置手册

    ### SVN安装配置手册知识点解析 #### 一、软件获取与安装 - **SVN服务器**:SVN(Subversion)是一种分布式版本控制系统,用于管理软件开发中的源代码版本控制。安装SVN服务器可以让团队成员通过网络共享代码库,...

    SVN服务端配置手册

    【SVN服务端配置手册】 SVN(Subversion)是一种版本控制系统,用于管理代码和其他文件的变更历史。在本文中,我们将重点介绍如何配置SVN服务端,包括VisualSVN Server的安装、客户端TortoiseSVN的安装,以及权限...

    svn中文手册 PowerDesigner中文手册

    标题中的“svn中文手册”和“PowerDesigner中文手册”表明了我们要探讨的两个核心主题:Subversion(简称svn)和PowerDesigner。Subversion是一个广泛使用的版本控制系统,用于管理软件开发过程中的源代码变更,而...

    SVN管理手册-中文

    "TortoiseSVN.pdf"是TortoiseSVN的用户手册,TortoiseSVN是一款Windows下的SVN客户端,它提供了图形化的界面,使得用户可以方便地进行版本控制操作。该手册会涵盖如何安装TortoiseSVN,创建版本库,检出、提交、更新...

    svn中文手册-版本控制

    ** SVN中文手册 - 版本控制系统详解 ** SVN(Subversion)是一种广泛使用的开源版本控制系统,用于管理软件项目的源代码和其他文件。它允许开发者在项目开发过程中跟踪和记录文件的更改,支持多人协作,避免冲突,...

    SVN使用手册大全(史上最全)-pdf版.pdf

    ### SVN使用手册大全知识点梳理 #### 一、SVN简介 Subversion(简称SVN)是一种集中式的版本控制系统,主要用于代码版本管理和团队协作。它能够帮助开发者追踪代码变更历史、协同开发并管理不同版本间的差异。 ###...

    svn操作手册

    svn操作手册 TortoiseSVN_en.chm

Global site tag (gtag.js) - Google Analytics