有的时候(如给客户进行特殊的部署),需要我们把代码回滚某一个版本,再给客户进行编译部署或客户端打包。SVN上和回滚相关的操作有好几个,在这里一一进行说明。
SVN回滚的第一步往往都是show log:
然后选中某一个版本(以下代称为“目标版本”),右键,有如下几个选项
1) Update item to revision 更新到此版本
临时回滚。在给客户回滚代码打包时,常用这种方式。效果类似于在目标版本刚刚提交的当天你进行了SVN的正常更新,然后到今天为止一直没有再更新过代码,也没有在本地修改过代码。
此时svn info,会显示目标版本版本号;
此时在代码根目录选择svn commit,会发现没有任何代码需要提交;
此时选择svn update,会更新到最新代码。
2) Revert to this revision 回滚到此版本
正式回滚。在最近连续1~N次提交都有问题时,常用这种方式。实现为将目标版本之后的所有提交,按时间顺序的逆序依次回滚,并将回滚的结果在本地生成更新。效果为SVN帮你在本地改了代码。要真正应用还需要进行提交,svn commit。
此时svn info,会显示最新版本版本号;
此时在代码根目录选择svn commit,会发现有代码需要提交;
此时选择svn update,一般没有代码更新。
3) Revert changes from this revision 回滚此版本的修改
正式回滚。在以往的某一次提交有问题时,常用这种方式。实现为将目标版本本身的那一次修改回滚,并将回滚的结果在本地生成更新。效果为SVN帮你在本地改了代码。要真正应用还需要进行提交,svn commit。
此时svn info,会显示最新版本版本号;
此时在代码根目录选择svn commit,会发现有代码需要提交;
此时选择svn update,一般没有代码更新。
下面让我们举例说明。
假设我们有一段代码:原始版本(版本1)如下:
int a = 0;
int b = 0;
int c = 0;
然后我们分别进行了3次修改和提交,分别是(红字表示变化的部分):
版本2:
int a = 1;
int b = 0;
int c = 0;
版本3:
int a = 1;
int b = 1;
int c = 0;
版本4:
int a = 1;
int b = 1;
int c = 1;
本地代码已经更新到最新(版本4),然后我们svn show log,选择版本2,右键,分别进行上述3种选择,结果是:
1) Update item to revision 更新到此版本
本地变为:
int a = 1;
int b = 0;
int c = 0;
svn commit不能提交。svn update会变回最新。
2) Revert to this revision 回滚到此版本
本地变为(同1):
int a = 1;
int b = 0;
int c = 0;
svn commit将更新到服务器。svn update不会修改本地。
3) Revert changes from this revision 回滚此版本的修改
本地变为:
int a = 0;
int b = 1;
int c = 1;
svn commit将更新到服务器。svn update不会修改本地。
注意:如果代码有外链,则外链也需要回滚。如XtTradeClient的外链XtPlatform,在XtTradeClient根目录下回滚,XtPlatform不受影响,因此往往需要进入XtPlatform目录同步回滚。
