- 浏览: 2542468 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (676)
- linux运维 (157)
- php (65)
- mysql (78)
- nginx (27)
- apche (18)
- framework (6)
- windows (9)
- IDE工具 (23)
- struts2 (7)
- java (13)
- 移动互联网 (14)
- memcache redis (23)
- shell基础/命令/语法 (37)
- shell (50)
- puppet (4)
- C (11)
- python (9)
- 产品经理 (27)
- Sphinx (4)
- svn (12)
- 设计构建 (12)
- 项目管理 (44)
- SEO (1)
- 网站架构 (26)
- 审时度势 (42)
- 网络 (14)
- 激发事业[书&视频] (81)
- 其它 (12)
- 摄影 (8)
- android (21)
最新评论
-
zhongmin2012:
原文的书在哪里
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
renzhengzhi:
你好,请问个问题,从master同步数据到slave的时候,s ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
ibc789:
你好,看了你的文章,我想请教个问题, 我在用 redis的时候 ...
redis 的两种持久化方式及原理 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
一、版本库访问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
发表评论
-
svnchanged_export.py 导出svn版本之间的变更文件
2012-06-18 17:03 3853===================== ... -
【汇总】svn
2011-12-22 13:13 1522========================回 ... -
shell之同步svn代码到os
2011-11-23 11:37 3257#!/bin/sh #SVN路径 svn_path_ ... -
批量删除版本库中的.svn文件夹(win客户端)
2011-10-17 15:40 1845安装:建立一个文本文件,随意起个名字,例如aaa.reg ... -
从SVN导出指定版本号之间修改的文件
2011-08-21 14:15 3623当一个网站项目进入运营维护阶段以后,不会再频繁地更新全部源文件 ... -
(图解) SVN版本冲突解决详解
2010-09-20 10:45 6298版本冲突原因: 假设 A 、 B ... -
TortoiseSVN 汉化版安装
2009-10-31 10:36 4883http://tortoisesvn.net/download ... -
[已测试]centos安装配置svn,并更新源代码
2009-09-10 13:28 3776安装完lamp以后,通过查看/etc/passwd /etc ... -
svn利用TortoiseSVN忽略文件或文件夹(目录)
2009-08-07 11:01 3174如果文件已经存在于版本库,你需要做以下步骤: To ... -
ubuntu安装配置svn,并更新源代码
2009-07-23 22:03 5866=============================== ... -
windows下搭建svn (一)
2009-06-15 21:37 17601 svn 下载页面:http://subversion.ti ...
相关推荐
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...
### Subversion (SVN) 手册:版本控制与高级主题详解 #### 一、Subversion简介 **Subversion**(简称SVN)是一种广泛使用的版本控制系统,它可以帮助团队管理和跟踪项目的开发过程中的变更历史。《Version Control...
### SVN 手册 For Subversion 1.7 相关知识点 #### 一、版本控制系统 Subversion (SVN) 概览 ##### 1.1 版本控制基础 版本控制是软件开发过程中的一项基本技术,它允许团队成员在不影响他人工作的前提下独立地...
这个"SVN手册文档 pdf.zip"包含了关于SVN的详细使用指南,对于理解和掌握SVN操作至关重要。 **一、SVN的基本概念** 1. **仓库(Repository)**:是SVN存储所有文件和版本历史的地方,类似于一个中央数据库。 2. **...
SVN1.9 英文手册,来自官方安装包
### SVN使用手册知识点详解 #### 一、安装说明 **Subversion (SVN)** 是一款广泛应用的版本控制系统,尤其在软件开发领域中占有重要地位。本文档将详细讲解如何在Windows环境下安装配置SVN服务器及客户端,并进行...
svn手册 htm 文件svn手册 htm 文件
Eclipse SVN学习手册是针对开发者如何在Eclipse集成开发环境中使用Subversion(SVN)进行版本控制的详尽指南。Subversion是一款广泛使用的开源版本控制系统,它帮助开发者管理项目源代码,跟踪更改,并协同团队工作...
**SVN 操作手册** **一、Export 和 SVN Checkout** `Export` 和 `SVN Checkout` 是 SVN(Subversion)中的两种主要操作,用于获取远程仓库的代码。 1. **Export**:此操作用于下载源代码,但不会创建一个工作副本...
SVN 使用手册大全 SVN(Subversion)是一款开源的版本控制系统,广泛应用于软件开发、文档管理和项目协作等领域。本手册将详细介绍 SVN 的使用方法和技巧,帮助读者快速掌握 SVN 的使用。 修改 SVN 访问密码 在...
在linux下的svn英文版使用手册,包括一些常用命令和基本操作
首先,`svn-book.pdf` 是一份详尽的SVN官方参考手册,它涵盖了SVN的所有核心功能和高级用法。这份手册通常会解释SVN的工作原理,包括如何创建仓库,如何克隆仓库,如何提交更改,如何解决冲突,以及如何使用分支和...
SVN使用手册word打印版 本手册是关于SVN(Subversion)的使用手册,旨在帮助初学者快速了解SVN的基本原理和使用方法。通过阅读本手册,读者可以学习如何使用SVN实现版本控制,了解基本的菜单操作,并且结合...
### SVN安装配置手册知识点解析 #### 一、软件获取与安装 - **SVN服务器**:SVN(Subversion)是一种分布式版本控制系统,用于管理软件开发中的源代码版本控制。安装SVN服务器可以让团队成员通过网络共享代码库,...
【SVN服务端配置手册】 SVN(Subversion)是一种版本控制系统,用于管理代码和其他文件的变更历史。在本文中,我们将重点介绍如何配置SVN服务端,包括VisualSVN Server的安装、客户端TortoiseSVN的安装,以及权限...
标题中的“svn中文手册”和“PowerDesigner中文手册”表明了我们要探讨的两个核心主题:Subversion(简称svn)和PowerDesigner。Subversion是一个广泛使用的版本控制系统,用于管理软件开发过程中的源代码变更,而...
"TortoiseSVN.pdf"是TortoiseSVN的用户手册,TortoiseSVN是一款Windows下的SVN客户端,它提供了图形化的界面,使得用户可以方便地进行版本控制操作。该手册会涵盖如何安装TortoiseSVN,创建版本库,检出、提交、更新...
** SVN中文手册 - 版本控制系统详解 ** SVN(Subversion)是一种广泛使用的开源版本控制系统,用于管理软件项目的源代码和其他文件。它允许开发者在项目开发过程中跟踪和记录文件的更改,支持多人协作,避免冲突,...
### SVN使用手册大全知识点梳理 #### 一、SVN简介 Subversion(简称SVN)是一种集中式的版本控制系统,主要用于代码版本管理和团队协作。它能够帮助开发者追踪代码变更历史、协同开发并管理不同版本间的差异。 ###...
svn操作手册 TortoiseSVN_en.chm