前言

今天和大家分享一下SVN的进阶知识,主要是对于有SVN基础的朋友。简单回顾一下上一篇基础知识。

一、SVN简介

  1. 什么是SVN?
    SVN全称为Subversion,是一个开源的版本控制系统。
    SVN = 版本控制 + 备份服务器

  2. 什么是TortoiseSVN?
    TortoiseSVN是Subversion系统的开源客户端。
    TortoiseSVN = 可视化操作的SVN

  3. TortoiseSVN几种常见的文件下标

二、SVN移动和复制

问题一:文件位置错误,如何移动文件至正确的位置?
1.方法一:左键选中拖动到想移动到的位置,但这个时候commit显示我们的文件是Missing状态如图

总结:左键拖动 = delete当前目录的文件 + 想要移动的目录增加没有上传SVN的文件

2.方法二:右键选中拖动到想移动到的位置

总结:右键拖动 = delete当前目录的文件 + add预期目录的文件

综上所述:右键拖动比左键拖动更快捷,节省了一步add的操作。第一步移动过来之后还需要add一下,把状态missing改成added方可提交,但是右键拖动的话状态直接就是added,下一步可直接提交。

问题二:如何复制文件至正确的位置?
1.方法一:右键拖动时会弹出选项,如图

和刚才一样,如果是移动的话就选SVN Move versioned item(s) here,如果是复制的话就SVN Copy versioned item(s) here

2.方法二:右键文件 Copy to … 然后填写我们的新名字,对应新的路径即可

三、版本比较

1.问题:文件内容变化,如何查看历史版本?
show log 查看文件变更记录,选中相对应的版本,右键open可以打开查看历史文件

2.问题:文件内容变化,如何进行版本比较?

  • 方法一:Diff/Diff with pervious version

  • 方法二:show log ,compare with working copy

注意:

  • Compare with working copy:和本地的文件进行比较
  • Compare with previous revision:和上一版本的文件进行比较

比较结果如下图:

可以看出版本与版本之间代码的变化

这一块是进入版本内容查看时的可视化效果,右边的颜色条对应不同的意思,这个大家有兴趣可以自行学习,简单说几个重要的,黄色Add(添加进去的代码),橙色Remove(删除的代码),红色Conficted(冲突的代码)

四、版本回退

1.问题:update,update to reversion的区别?
update:低于最新版本的文件,更新至最新版本 例如:193562 -> 193566

update to reversion :更新至指定版本,可以往回更新,不可以commit 例如:193566 -> 193562

听上去很绕是不是?没关系,我用言简意赅的总结一下:

我们要弄清楚最新版本,本地版本,历史版本三个概念。本地版本 > 最新版本 > 历史版本,所以如果我们当前版本是低于最新版本的话,当其他成员还没有将他的本地版本commit的时候,你update会直接更新到最新版本,如果其他成员commit了,这个时候你update就更新到了其他的成员的本地版本。

update to reversion,更新至指定版本,这个比较好理解就不做解释了。弊端就是更新至指定版本之后,没有办法在commit了,也就是说更新后的这个版本是历史版本,是小于我们的最新版本的是无法提交的。所以就引出了我们下面的问题。

2.问题:revert、revert to reversion的区别?
revert:撤销在最新版本(193566)上的修改动作,回退至最新版本。

例如:本地版本 -> 193566

revert to revision(show log):回退至指定版本,可以往回更新,可以commit。

例如:193566 -> 本地版本(内容同193562)

总结一下:

revert:简单来说就是本地版本可以回退到最新版本,事迹场景就是你加了很多代码,但是发现很多代码都是错的,你又不想找错误,你就可以回退到你刚开始更新过的最新版本。

revert to revision:可以回退到指定版本,但底层操作是这样理解的。内容确实是回退到了历史的某个版本,但是实际却是最新版本之上的本地版本。有点绕昂,可以这样理解,就是把原先的历史版本作为我们的本地版本,这样的话本地版本 > 最新版本 就可以commit提交了。实际场景就是,我们中间更新迭代了很多版本,发现现在的项目没有以前某个版本好,想回退至某个历史版本,如果用update to reversion的话是没办法提交的,就可以用我们的revert to revision来解决。

五、SVN总结

还是那句话,只要你update的够快,基本上就没什么问题

update:

  • 修改文档前先update

  • 出现conflicts及时解决

commit:

  • commit周期尽量短,减少conflicts的出现

  • commit的描述要详细,方便其他人查看

SVN的进阶知识今天就分享到这里了,有更好的方法欢迎大家和我讨论:)

参考链接:https://blog.csdn.net/Ljj9889/article/details/123269804