`
wen742538485
  • 浏览: 228551 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

svn命令行基本操作

    博客分类:
  • java
阅读更多
SVN 基本操作


检出checkout(co)

svn co ${url}

更新update(up)

svn up

提交commit(ci)

svn ci -m " 修改xxx 问题"

查看当前目录最近5 次提交记录

svn log -l 5

查看当前工作拷贝信息

svn info

查看当前未提交的文件status(st)

svn st

这个命令输出每个添加、修改、删除过的目录和文件,前面的C 表示冲突,要特别注意。linux 下也可以用svn st | grep ^C 来查看冲突项。

查看当前修改内容

svn diff

撤销当前修改,覆盖为资源库最新版本

svn revert path/filename

递归撤销当前目录修改,覆盖为资源库最新版本。注意新加的文件不会被删除,这时也可以删除工作拷贝,重新checkout

svn revert . --recursive

SVN merge

自动合并

主干到分支

建立分支以后,一个要做的事情就是定期将主干上的修改合并到分支。先进入分支的工作拷贝,确认分支上所有修改已经提交,然后:

$ svn merge http://codeserver/calc/trunk

--- Merging r345 through r356 into '. ':

U    button.c

U    integer.c

--- Recording mergeinfo for merge of r345 through r356 into '. ':

U   .

$

假设t1 时刻建立了分支,t2 时刻执行上面的命令进行合并,t3 时刻再次执行上面的命令进行合并。 由于分支是从主干分离出去的,所以第一次合并的时候(t2 ),svn 能知道分支建立以后进行了哪些修改,它会将分支建立以后这段时间主干的修改(t1 ~t2 ),应用到当前工作拷贝。

第二次执行上述命令的时候,svn 会意识到t1 ~t2 时刻的修改已经合并过了,所以它仅将t2 ~t3 时间段内主干的修改,应用到当前工作拷贝。 第二次合并的时候,svn 能够做到智能合并,这依赖于svn:mergeinfo 属性,请注意上面命令输出的最后一行,表示svn 正在将svn:mergeinfo 属性记录到当前目录下,所以执行svn merge 目录的时候,最好在工作拷贝的根路径下执行。

svn:mergeinfo 的内容大致如下,它记录合并了哪个路径的哪两个版本的差异,可用svn propget svn:mergeinfo path 查看,输出类似如下:

/branches/V8822_optimiz_20090722/lottery:8828-9374

/branches/V8865_wap_20090727/lottery:8876-8937

/branches/V8944_P3_20090803/lottery:8992-9400

/branches/V9377_newp3_20090818/lottery:9400-9947

/branches/V9377_wappay_20090818/lottery:9404-9493

分支回主干

在分支上开发完成后,需要将分支合并到主干。进入主干的工作拷贝的根目录,运行

$ svn merge http://codeserver/calc/branchurl --reintegrate

我们假设上述命令发生在t4 时刻,如果上面的命令不带--reintegrate 参数,可能会造成冲突,在svn 看来,t1 时刻建立了分支,然后主干上进 行了一些修改,分支上也进行了一些同样的修改(原因是我们在t2 、t3 时刻曾经将主干的修改合并到分支),所以就冲突了。 加上这个参数以后,根据分支目录http://codeserver/calc/branchurl 上的svn:mergeinfo 信息,svn 在进行合 并的时候会排除主干迁移到分支的这些修改,仅仅将分支上的修改迁回主干。

假设在t5 时刻,需要再次合并分支上的修改,这时可以不带--reintegrate 参数,因为在t4 时刻执行命令以后,已经将svn :mergeinfo 记录在主干。

手工合并

svn merge 可以理解为比较资源库中的两个不同版本(diff ),然后将差异应用到当前工作拷贝。 实际上,上面描述的自动合并功能是svn1.5 以后才有的,在这之前都是通过手工合并的方式工作。同时,在一些比较复杂的场景,手工合并会更加灵活。手工合并的方式为:

$ svn merge -r version1:version2 http://codeserver/calc/branchurl

$ svn merge -c version1 http://codeserver/calc/branchurl

上面的version1 和version2 是版本号,可以用HEAD 来代替当前最新版本。第一条命令将分支上version1 到version2 的修改合并到当前工作副本,第二条命令将第version1 次提交的修改合并到当前工作副本。

特别要注意理解 变更集 的概念。下面以15 选5 项目的分支为例,假设svn log 如下(经过简化)。

------------------------------------------------------------------------

r24673 | yeli.hl | 2012-01-08 21:44:33 +0800 ( 日, 08  1 2012) | 1 line

 

开奖时间修改为20 :30

------------------------------------------------------------------------

r24644 | yeli.hl | 2012-01-06 11:42:22 +0800 ( 五, 06  1 2012) | 1 line

 

修正参与链接

------------------------------------------------------------------------

r24615 | yeli.hl | 2012-01-04 18:59:30 +0800 ( 三, 04  1 2012) | 1 line

 

merge trunk 24611

------------------------------------------------------------------------

r24601 | yeli.hl | 2012-01-04 15:29:43 +0800 ( 三, 04  1 2012) | 1 line

 

优化追号期数的显示

------------------------------------------------------------------------

r24585 | yeli.hl | 2012-01-04 13:55:42 +0800 ( 三, 04  1 2012) | 1 line

 

修改“ 我的淘宝” 导航条为3.1 版本。

------------------------------------------------------------------------

r24506 | yeli.hl | 2011-12-30 15:17:26 +0800 ( 五, 30 12 2011) | 1 line

 

merge trunk 24505

------------------------------------------------------------------------

r24182 | yeli.hl | 2011-12-14 18:01:48 +0800 ( 三, 14 12 2011) | 1 line

 

十五选五中奖号码解析。

------------------------------------------------------------------------

r24050 | yeli.hl | 2011-12-05 15:04:39 +0800 ( 一, 05 12 2011) | 1 line

 

取彩期的时间程序调度。15X5 重命名。投注页面静态代码拆分。

------------------------------------------------------------------------

r23950 | yeli.hl | 2011-11-28 16:50:16 +0800 ( 一, 28 11 2011) | 1 line

 

anhui 15*5

可以看到,建立分支的那一次提交是r23950 ,则-r 23950:24050 和-c 24050 代表的是同一个 变更集 ,前者表示23950 ~24050 的差异,后者表示24050 这次提交的变更,其实它们都是一样的,都是24050 这次提交导致的变更。因此,假设我们已 经合并了-r A:B ,如果B 之后又有一系列提交,最新版本是C ,我们想把这之后所有的修改并过来,则需要-r B:C ,注意第二次包括了B 。

假设现在我们想要手动方式把这个分支的变更迁回主干。则命令为(需要排除两次merge 主干的修改):

$ svn merge -r 23950:24182 branch_url

$ svn merge -r 24506:24601 branch_url

$ svn merge -r 24615:HEAD branch_url

如果用-c 方式,最后一个命令等效为:

$ svn merge -c 24644 branch_url

$ svn merge -c 24673 branch_url

撤销已提交操作(回滚)

merge 的另外一个用途是撤销已经提交的代码,具体的做法是反向merge ,用下面的命令撤销一次提交,假设url 路径上进行了不应该的提交,进入该路径的工作拷贝,执行

$ svn merge -c -A url

$ svn merge -r C:B url

第一个命令撤销版本号是A 的提交,注意版本号前面的减号。第二个命令撤销B ~C 的提交。执行完以后,再commit 。当然,实际上svn 并不能删除任意一个版本,这些操作仍然都会在历史中,它的作用只是在当前的HEAD 中撤销了某次(或某段)提交的内容。

注意事项

1.   为了防止造成破坏,可以带上--dry-run 参数进行预览,合并的时候如果带上这个参数,工作拷贝将不会被修改,但是你能够看见有哪些代码被修改,哪些有冲突。

2.   merge 前保证所有代码已经提交,并且已经进行了更新,并检查当前的工作拷贝是正确的。

3.   执行merge 操作以后,解决完冲突立即提交。这样可以保证本次提交代表了一次纯粹的merge 。例如上面的r24506 、r24615 ,在手工merge 回主干的时候,需要排除这些提交,如果这些提交包含了其它修改就没有办法区分了。

4.   提交的注释中描述清楚当前是从哪个版本merge 到哪个版本,有时候手工合并的时候需要参考到。

5.   在根目录执行merge 操作,避免在子目录和文件中留下mergeinfo 信息。

彩票SVN 相关操作

创建代码分支

以lottery 为例,随便找个目录,执行类似下面的命令

svn cp http://svn.taobao-develop.com/repos/lottery/trunk/lottery \

http://svn.taobao-develop.com/repos/lottery/branches/V${ 当前主干版本号}_${ 项目名称}_${date}/lottery \

-m " 创建XXX 项目分支" --parents

可以到http://svn.taobao-develop.com/repos/lottery/branches/ 下参考其它的分支命名。

合并主干的最新修改到分支

开发一段时间以后,需要将主干的最新修改合并到项目分支。进入分支工作拷贝的根路径(请注意一定要在根路径进行操作),运行

1.   svn info 确认当前工作路径正确:指向分支

2.   svn st 确认所有代码都已经提交

3.   运行命令

4.   svn merge http://svn.taobao-develop.com/repos/lottery/trunk/lottery

5.   人肉解决冲突,可以用svn st 查看(*nix 下用svn st | grep ^C 查看) 是否有冲突,C 开头的文件标识有冲突,解决完以后用svn resolved path/filename 标记冲突为已解决

6.   svn st 确认已经没有冲突了

7.   提交

合并分支修改到主干

上日常的时候,需要将项目分支修改合并到日常服务器的主干工作拷贝,但是不提交。在主干工作拷贝根路径(请注意一定要在根路径进行操作)下执行以下操作

1.   svn info 确认当前工作路径正确:指向主干

2.   svn st 确认所有代码都已经提交

3.   运行命令

4.   svn merge http://svn.taobao-develop.com/repos/lottery/branches/V${ 当前主干版本号}_${ 项目名称}_${date}/lottery --reintegrate

5.   人肉解决冲突,可以用svn st 查看(*nix 下用svn st | grep ^C 查看) 是否有冲突,C 开头的文件标识有冲突,解决完以后用svn resolved path/filename 标记冲突为已解决

6.   svn st 确认已经没有冲突了

删除代码分支(项目预发后删除代码分支)

随便找个目录,执行下面的命令(lottery 和keno 没有区别)

svn mv http://svn.taobao-develop.com/repos/lottery/branches/V${ 当前主干版本号}_${ 项目名称}_${date}/lottery \

http://svn.taobao-develop.com/repos/lottery/branches/backup_branches/V${ 当前主干版本号}_${ 项目名称}_${date}/lottery \

-m " 删除${ 项目名称} 代码分支"

项目合并

可先从主干拉一个分支,两个项目分别将自己的修改合并到这个分支。上日常的时候再将这个分支合并到主干。

分享到:
评论

相关推荐

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

    Subversion命令行客户端:svn svn选项 svn子命令 svn add svn blame svn cat svn checkout svn cleanup svn commit svn copy svn delete svn diff svn export svn help svn import svn info svn list svn log svn ...

    SVN使用手册中文版.chm

    Subversion命令行客户端:svn svn选项 svn子命令 svn add svn blame svn cat svn checkout svn cleanup svn commit svn copy svn delete svn diff svn export svn help svn import svn info svn list svn log svn ...

    SVN操作手册中文版网页格式

    转换后为网页格式的<SVN操作手册中文版> 目录 译者序 前言 序言 读者 怎样阅读本书 本书约定 排版习惯 图标 本书组织结构 Subversion 1.1的新特性,svn客户端和linux下命令行。 目录 1. 简介 1.1. 什么是 ...

    python3调用windows dos命令的例子

    最近游戏项目在多个国家上线,每个国家都对应两份儿svn目录(一份是本地策划目录,一份...因为windows安装svn后是没有svn命令行的,所以首先需要下载Apache-Subversion,这是svn命令行工具,解压后设置环境变量。 pyth

    使用Subversion进行版本控制(针对 Subversion 1.4)

    Subversion 命令行客户端:svn svn选项 svn子命令 svnadmin svnadmin选项 svnadmin子命令 svnlook svnlook选项 svnlook子命令 svnsync svnsync选项 svnsync子命令 svnserve svnserve选项 svnversion mod_dav_...

    SVN中文使用手册

    本手册是为那些想使用 Subversion 来管理数据,并且喜欢使用图形界面客户端程序替代命令行程序的 电脑...附录 E, 命令行交叉索引给出了 TortoiseSVN 命令与其对应的 Subversion 命令行工具 svn.exe 命 令之间的关系。

    SVN服务器端全部配置

    建立D:\svn,在命令行该目录(D:\subversion\bin\)下输入svnadmin create D:/svn/repos1,如果创建成功,D:\svn下将会多一个repos1目录。 2、 让svnservice服务随Windows系统一起启动,在命令行下输入:sc create ...

    SVN安装及基本操作(图文教程)

    1.SVN是什么 svn是Subversion的简称,是一个开源的代码版本控制系统,svn就是用于多人共同开发同一个项目,达到资源共用目的工具。 版本控制是什么? 版本控制(Revision control)是指对软件开发过程中各种程序代码...

    svn-1.4.3-setup.exe.7z

    请注意,检查每一条路径是一件消耗极大的操作,特别是修订版本日志,服务器会检查在每一个修订版本的每一条路径是否可读,对于影响很多文件的修订将会花费很多时间。 认证和授权是不同的处理过程,如果用户希望...

    svn与git结合,实现版本管理

    本文来自csdn,文章主要介绍了在ubuntu14.04环境下git的基本使用方法,一个分支模型中,各个操作的流程和其对于开发过程的意义等。1、实际使用的是svn与git结合,没有单纯的使用svn或git,当然svn和git都是一套完整...

    在Eclipse中使用SVN与CVS代码管理工具管理项目

    2. SVN 的安全性和版本管理功能较强,可以实现异地开发的支持,但 SVN 安装和使用多采用命令行方式,学习曲线高,同时不提供对变更管理的功能,对于小型团队,可以采用 SVN 进行管理。3. ClearCase 功能完善,安全性...

    TortoiseSVN客户端程序

    七、基本操作流程 1、取出(check out) 取出版本库到一个工作拷贝: 来到任意空目录下,比如在f分区建立一个空文件夹 f:\work 。“右键 -> SVN Checkout”。在“URL of repository”中输入“svn://localhost/svn/...

    CollabNetSubversionEdge-5.2.3_linux-x86_64.tar.gz

    现公司我们给开发人员部署的正是CSVN,简单易用,权限管理,备份等管理通过web来操作,搭建完成后,基本无需进入命令行操作,也可以配合rsync进行触发推送。下面是我的一些文件截图,这篇博文,只是简单的谈谈搭建...

    TortoiseSVN-1.14.3中文版(TortoiseSVN-1.14.3-zh_CN.pdf,针对Windows 平台)

    目录 前言 1. 什么是 TortoiseSVN? 2. TortoiseSVN 的特性 3. 许可协议 4. 开发 ... TortoiseSVN 操作 ... E. 命令行交叉索引 ... F. 实现细节 ... G. 语言包和拼写检查器 ... 术语表 ... 索引 ...

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

    TortoiseSVN 操作 D.1. TortoiseSVN 命令 D.2. Tsvncmd URL handler D.3. TortoiseIDiff 命令 E. 命令行交叉索引 E.1. 约定和基本规则 E.2. TortoiseSVN 命令 E.2.1. 检出 E.2.2. 更新 E.2.3. 更新到版本 E.2.4. ...

    eclipse-git-extensions:通过命令行Git启动来扩展eclipse git支持,以实现jgitegit不支持的功能,

    该存储库定义了一个Eclipse插件,旨在支持JGit / Egit尚不支持的一系列Git操作。 它通过启动命令行Git来...简单的命令行,可在不离开Eclipse的情况下运行所需的任何其他Git操作。 还包括push,pull,fetch和checkout的

    Java进阶版本管理工具Git全套视频教程

    10.命令行-- git基本操作 10.1 介绍 10.2 环境配置 10.3 初始化本地仓库 init 10.4 克隆 clone 10.5 查看状态 status 10.6 add 10.7 commit 10.8 删除 rm 11. 命令行--git 远程仓库操作 11.1 查看远程 11.2 添加/...

    BuddyPress:BuddyPress开发库。 该存储库只是https上开发SVN的镜像

    您需要对如何在计算机上使用命令行有基本的了解。 这将允许您设置本地开发环境,在必要时启动和停止它,并运行测试。 您将需要在计算机上安装Node和npm。 Node是用于开发人员工具JavaScript运行时,npm是Node附带的...

    wordpress-develop-svn:2021-02-20T17:53Z:sparkles:此存储库使用https:github.com更新。 身材::frog:

    您需要对如何在计算机上使用命令行有基本的了解。 这将允许您设置本地开发环境,在需要时启动和停止它,以及运行测试。 您将需要在计算机上安装Node和npm。 Node是用于开发人员工具JavaScript运行时,npm是Node...

    GitToolPart

    原来都是老CVS或SVN的用户.所以打算把内部Wiki上比较两篇粗糙Git的入门文章操作重写一遍.在本篇中全面解析git概念和基础使用方法.在写的这篇文章时.在思考.应该如何快速切入理解Git的基本使用?相对Linux操作系统下...

Global site tag (gtag.js) - Google Analytics