我是靠谱客的博主 光亮寒风,最近开发中收集的这篇文章主要介绍玩转SVN系列之【如何放弃本地/服务器端所做的修改】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前几天我遇到了如何在GIT下放弃本地所做的修改的问题,并写了一篇博客来整理其中的思路,详见(玩转GIT系列之【如何放弃本地/服务器端所做的修改】)。但是今天,我在SVN下遇到了同样的问题,而且是linux系统下命令行的SVN,不是windows系统下的图形界面。所以,一切还是得靠命令来解决,具体来说要分以下几种情况来区别对待:

第一种情况:放弃本地的修改内容

也就是说,你所做的修改仍然是在本地,尚未提交到服务器端。这种情况下,使用“svn revert”命令就能取消之前的修改。用法如下:

svn revert [-R] target

其中target是你需要放弃修改(即还原成服务器版本)的目录或文件。

  • 当target为单个文件时,直接“svn revert target”就行了;
  • 当target为某个目录时,需要加上参数-R(Recursive,递归),否则只会针对target根目录进行处理,而不会处理它下面的子目录。

比如:想要放弃整个工程里所有的修改内容,则可以在整个工程的根目录下执行下述命令:

svn revert -R *

注意:一旦使用了这个命令,就意味着你完全放弃本地所做的修改,这些文件的内容将会被彻底还原成服务器端的版本。而这种放弃不可撤销的,是找不回来的,这一点请注意!

特别说明:此处的revert命令,只是针对之前就已经存在的那些文件。如果你本次还新增了一些文件,则revert命令并不会将你新增的文件删除或者清空,仍需你自己手动操作。经过摸索,我找到了一个命令可以完成这个任务,也就是说,可以自动删除那些你新增的、但是尚未提交的文件。亲测可用,大家如果有需要可以拿去用:

svn st | grep '^?' | awk '{print $2}' | xargs rm -rf

划重点:

总结一下就是,如果你修改了若干文件,同时还新增了一些文件,然后突然想放弃所有的操作,将所有代码恢复原样,那么则可以采取以下命令组合:

svn revert -R *                                              # 对已经存在的文件,恢复原样
svn st | grep '^?' | awk '{print $2}' | xargs rm -rf         # 对本次新增的文件,全部删除

特别说明:

以上方法,经本人反复尝试,在实际应用中存在一些未知的风险,请谨慎使用。具体的现象描述如下:

1、从SVN上克隆一个linux系统的代码仓库至本地,编译完毕,所有一切正常;
2、执行“svn revert -R *”命令,再次编译,所有一切依旧正常;
3、执行“svn revert -R *”之后接着执行“svn st | grep ‘^?’ | awk ‘{print $2}’ | xargs rm -rf”命令,再次编译,出现问题,编译生成的image文件异常(表现为内容偏大,原本是3.99M,现变为4.99M,原因未知);

上述现象可反复重现,但是原因未知,将其记录在此处,待日后若有结论再行补充。


第二种情况:放弃服务器端的修改内容

也就是说,你所做的修改已经被提交到了服务器上了。这种情况下,只能用“svn merge”命令来进行版本回滚。回滚的操作过程如下:

1、首先保证我们拿到的是最新代码

svn update

假设最新版本号是28。

2、然后找出要回滚的确切版本号

svn log [something]

假设根据svn log日志查出要回滚的版本号是25,此处的something可以是文件、目录或整个项目。如果想要更详细的了解情况,可以使用svn diff -r 28:25 [something]。

3、回滚到版本号25

svn merge -r 28:25 something

为了保险起见,再次确认回滚的结果:

svn diff [something]

确认正确无误,方可提交。

4、提交回滚之后的内容

svn commit -m "Revert revision from r28 to r25, because of ..." 

提交后版本变成了29。

总之,将以上操作总结为三条如下:

  1. svn update,svn log,找到最新版本(latest revision);
  2. 找到自己想要回滚的版本号(rollbak revision);
  3. 用svn merge来回滚: svn merge -r : something;

收工!

最后

以上就是光亮寒风为你收集整理的玩转SVN系列之【如何放弃本地/服务器端所做的修改】的全部内容,希望文章能够帮你解决玩转SVN系列之【如何放弃本地/服务器端所做的修改】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部