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

SVN回滚版本

 
阅读更多
我刚开始使用SubVersion时, 想把svn代码库回滚到以前某个版本,  上网找来找去都找不到(那时文档比较少), 让我郁闷了好一阵子.  现在记录一下 SubVersion回滚的方法:

   第一种方法: 使用TortoiseSVN进行回滚. 很明显, 这种方法只适用于windows平台. 以下摘自 TortoiseSVN文档:

B.4. 回滚版本库里的版本
B.4.1. 使用版本日志对话框
如果想恢复某个版本或者版本范围的变更,最简单的方法是使用版本日志对话框。这种方法也可以用来撤销最近的若干次变更,把以前的某个版本变成最新版。

1.选中想要恢复变更的文件或者文件夹。如果想要恢复所有的变更,需要选中最顶层的文件夹。

2.选择TortoiseSVN → 显示日志,显示出版本列表。有可能需要使用全部显示或者下100 按钮,把想要恢复的版本显示出来。

3.选中想要恢复的版本。如果想要恢复一个版本范围,选中想要恢复的第一个版本,按住shift键,然后选中想要恢复的最后一个版本。注意,当恢复多个版本的时候,这些版本必须在列表中是连续的。用鼠标右键点击选中的版本(段),然后选择右键菜单 → 恢复这些版本的变更。

4.如果想要把以前的某个版本变成最新版本,右键点击选中的版本(范围),然后选择右键菜单 → 恢复到此版本。就能够撤销被选中版本后面所有的变更。

工作拷贝已经恢复到了变更以前的状态。检查恢复后的结果,然后提交变更。

B.4.2. 使用合并对话框
如果要撤销更大版本范围的变更,可以使用合并对话框。上一个方法在后台使用了合并的机制,在这个方法里我们直接使用合并功能。

1.在工作拷贝上选择TortoiseSVN → 合并。

2.在起始:文本框里输入想要恢复的变更所在的分支或标签的URL。它也将作为默认URL。

3.在起始版本文本框里输入当前工作拷贝的版本号。如果能够保证没有其他人会提交变更,可以使用最新版本。

4.确认使用“起始:”的 URL检查框处于被选中的状态。

5.在结束版本里输入想要恢复到的版本号。比如,想要恢复的最小版本号的前一个版本号。

6.点击合并按钮完成合并。

工作拷贝已经恢复到了变更以前的状态。检查恢复后的结果,然后提交变更。

B.4.3. 使用svndumpfilter
因为TortoiseSVN绝不会丢弃数据,所以那些被回滚的版本仍然以中间版本的形式被保留在版本库里。只是最新版本已经回到了以前的状态。如果想让版本库里的某些版本彻底消失,擦去这些版本曾经存在过的所有痕迹,就必须采取更极端的手段。不推荐使用这种方法,除非有很好的理由。比如某人向一个公开的版本库里提交了一份机密文件。

从版本库里删除数据的唯一方法就是使用svnadmin这个Subversion命令行工具。具体如何实现请参考Subversion手册。





第二种方法: 使用SubVersion自带的svn merge 命令. 这种方法适用于任何能使用SubVersion的平台. 以下摘自 <使用SubVersion进行版本控制> 4.4.2节:

svn merge另一个常用的做法是取消已经做得提交,假设你愉快的在/calc/trunk工作,你发现303版本对integer.c的修改完全错了,它不应该被提交,你可以使用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.
我们可以把版本库修订版本想象成一组修改(一些版本控制系统叫做修改集),通过-r选项,你可以告诉svn merge来应用修改集或是一个修改集范围到你的工作拷贝,在我们的情况例子里,我们使用svn merge合并修改集#303到工作拷贝。

记住回滚修改和任何一个svn merge命令都一样,所以你应该使用svn status或是svn diff来确定你的工作处于期望的状态中,然后使用svn commit来提交,提交之后,这个特定修改集不会反映到HEAD版本了。

继续,你也许会想:好吧,这不是真的取消提交吧!是吧?版本303还依然存在着修改,如果任何人取出calc的303-349版本,他还会得到错误的修改,对吧?

是的,这是对的。当我们说“删除”一个修改时,我们只是说从HEAD删除,原始的修改还保存在版本库历史中,在多数情况下,这是足够好的。大多数人只是对追踪HEAD版本感兴趣,在一些特定情况下,你也许希望毁掉所有提交的证据(或许某个人提交了一个秘密文件),这不是很容易的,因为Subversion设计用来不丢失任何信息,每个修订版本都是不可变的目录树 ,从历史删除一个版本会导致多米诺效应,会在后面的版本导致混乱甚至会影响所有的工作拷贝。 [9]

解释一下,  svn merge -r 303:302 http://svn.example.com/repos/calc/trunk 这个命令是把当前目录当作工作拷贝.  如果想指定工作拷贝路径(如: c:/test), 则命令变成以下:

  svn merge -r 303:302 http://svn.example.com/repos/calc/trunk  c:/test

转载之 http://blog.csdn.net/riag/article/details/1630819
分享到:
评论
1 楼 w342523 2013-10-15  
[color=darkred][/color]份额份额份额分分[align=center][/align]

相关推荐

    jenkins+svn+maven构建

    两种部署jenkins的方法,通过jenkins+ssh+shell实现代码发布及回滚,也可通过svn回滚

    SVN图解教程

    SAE自2011-7-10日起,将全面支持SVN代码部署,用户不仅可以通过任何SVN客户端部署代码,而且SAE现有的代码部署方式也已经对接应用的SVN...通过SVN客户端svn update可以获取最近的更新,也可以通过svn客户端回滚代码。

    AnkhSvn操作手册

    17 4.4.2 签入一个新项 18 4.5 获得和释放锁18 4.5.1 锁定一个项19 4.5.2 释放锁19 4.6 修改取消20 4.7 回滚一个项到特定的版本 20 4.8 查找什么人对其中的一行进行了修改 21 4.9 分支、标记和合并22 4.9.1 创建一个...

    SVN中如何打基线SVN中如何打基线SVN中如何打基线

    在程序发布时打基线也是尤为重要,如果每次发布新版本时都打一个基线,那么可以做到版本回滚;查找特定版本的BUG;比较版本之间的差异;发布老版本等等。

    jenkins + svn+maven持续集成

    jenkins + svn+maven持续集成

    SVN打基线常用命令使用介绍

    在程序发布时打基线也是尤为重要,如果每次发布新版本时都打一个基线,那么可以做到版本回滚;查找特定版本的BUG;比较版本之间的差异;发布老版本等等。通常版本控制软件都有实现打基线的功能。

    Tortoise SVN

    非常方便的工具,方便代码的版本,回滚,差异比较,版本比较等,功能强大

    svn_publisher:一个基于SVN和rsync的线上代码发布系统,目前已经不维护了

    于是我以前做的,就是拿一台能连上开发SVN服务器的机器,部署上SVN和rsync客户端,用php调用系统命令,执行一些svn co svn update rsync的命令,在网络端展示svn的版本历史,管理员选择一个版本之后,

    Go-go-deploy基于SVN的web集群一键部署工具

    go-deploy:基于SVN的web集群一键部署工具,增量一键更新、一键回滚,上百节点秒级完成,急速web上线工具

    dld:上线回滚,批量部署

    php 代码上线回滚管理(根据版本号,从svn版本库,提取出文件列表,同步至本地目录(git控制,回滚需要),再同步生产环境) 基本流程 资产管理,及批量执行命令 php代码管理 登录 资产管理 ansible playbook 上线管理

    SVN手把手操作手册文档

    svn详细操作文档,包含代码的仓库初始化,代码的提交,回滚,删除,添加,缓存区,以及文档管理,详细的操作说明见文档操作步骤。

    SVN服务端和客户端64位软件下载

    代码开发的代码版本管理工具,能够高效的集体合作工作。进行代码版本管理,代码出现大问题可查看历史版本进行回滚修改,适合多人开发时使用。

    TortoiseSVN-1.12.0.28568-x64-svn-1.12.0.rar

    TortoiseSVN-1.12是一个工程文件管理软件,可以很方便的管理你的工程,方便修改回滚等操作。

    java war包+tomcat+svn+pom.xml实现各开发环境自动化部署

    1.yum安装svn (注意防火墙开发端口号,如果是 云服务器,需要添加安全组开发端口号) 2.创建svn资源仓库 3.有以下几个配置文件 conf db format hooks...第二步 设置历史回滚路径和 脚本 1 路径管理 2 脚本 第三步 部署测试

    Git+SonarQube+Jenkins环境配置流程

    除了git还有svn、cvs这样的版本控制系统,它们的区别在于一个是分布式一个是集中式集中式就是svn和csv这样的版本控制系统,分布式是git区别在于集中式的版本控制系统每次在写代码时都需要从服务器中拉取一份下来,...

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

    回滚版本库里的版本 B.4.1. 使用版本日志对话框 B.4.2. 使用合并对话框 B.4.3. 使用svndumpfilter B.5. 比较一个文件的两个版本 B.6. 包含一个普通的子项目 B.6.1. 使用svn:externals B.6.2. 使用嵌套空作拷贝 B....

    Git权威指南PDF完整版

    1.3 SVN—集中式版本控制集大成者/ 7 1.4 Git—Linus 的第二个伟大作品/ 9 第2章 爱上 Git 的理由/ 11 2.1 每日工作备份/ 11 2.2 异地协同工作/ 12 2.3 现场版本控制/ 13 2.4 避免引入辅助目录/ 15 2.5 重写提交说明...

    Walle上线部署系统工具-其他

    支持git、svn版本管理,支持各种web代码发布,PHP,Python,JAVA等代码的发布、回滚,可以通过web来一键完成。Walle特点:用户分身份注册、登录开发者发起上线任务申请、部署管理者审核上线任务支持多项目部署支持多...

    自动化发布部署方案.v1.2.docx

    为了避免对业务的影响及减少上线的重复操作,请执行以下上线规范 第一步: 开发人员提交代码到GIT/SVN的测试... 先重启一台服务器上的服务,观察效果,如果没问题再重启其他台,有问题的话进行回滚(运维人员执行)

    maven window下安装包

    第11章:用Maven管理项目版本/11.4 版本管理举例/11.4.7 release:rollback:回滚 第11章:用Maven管理项目版本/11.4 版本管理举例/11.4.8 release:perform:执行发布新版本 第11章:用Maven管理项目版本/11.4 版本管理...

Global site tag (gtag.js) - Google Analytics