一:SNV的最常用的几个基本操作
svn作为目前最为流行的版本管理软件(仅次于github),与我们的代码寸步不离,给开发人员带来了极大的便利。但是对于初学者而言,一次又一次的冲突确实让
人不免心烦。这是因为初学者还不太了解svn的版本生成机制,看似简单的提交操作就是不成功;这里我以一个简单的案例来说明这个问题。
1、增加文件
使用SVN客户端(通常叫做小乌龟)往SVN服务器里面添加文件有两种方式:
a、使用check out 将版本库里面的文件(没有文件也可以)检出到本地指定的目录,这样一来本地的目录就处于版本管理当中,我们把想要被管理的文件移动到目录里,然后点击add表示请求被管理,最后提交即可。这种方式并非最佳方案,只适合刚刚新建的版本库或版本库文件较少的情况。
b、最佳方案是进入我们想要被管理的文件目录,然后点击空白处弹出菜单,使用import导入到版本库。
2、删除文件
最常用的方式是:check out项目,删除某个文件,然后提交(这个文件虽然被删了但是仍然可以提交),这时候版本库里面的文件就会被删除。
3、还原
选中我们要还原的文件,右击选择还原。
4、对比
在提交多个文件或者与资源库同步的时候,会弹出填写日志的窗口,这里面双击要提交的文件,就会出现对比窗口。
5、与资源库同步
与资源库同步于我看来是整个SVN里面最灵魂的一个功能,因为这个功能可以让你知道有哪些文件需要更新,有哪些需要提交,有哪些已经产生了冲突。选中要与资源库同步的项目或者文件,右击选择同步即可。
6、更新版本库中已经删除的文件
如果我们自己提交的文件被别人删除了,之后我们再更新这个文件,那么本地的文件也会被删除。
二:SVN常见的问题和解决方法
1、为什么提交不成功?
首先我们要明确的是提交文件不会产生冲突,只会出现提交不成功,出现这个问题是因为我们在没有跟新文件的情况下,修改了文件的内容
企图提交到服务器;于是直接弹出一个错误窗口,提交失败。
那么为什么没有更新就不允许提交呢?对于这个问题我想我还是有必要先说一下SVN的版本机制:
假设svn服务器里有一个版本仓库jeeProject ,版本库里面有一个文件App.java ,version=1 ,A、B两个人同时更新了代码,他们使用的都是最新版本,5分钟之后A提交了代码,由于是最新版本提交一定不会出错,这个时候服务器的版本就会更新到2,A因为提交了代码,所以文件的版本也会变成2 ;但是B的版本仍然还是1 ,10分钟之后B提交了代码,因为B没有更新文件版本仍然是1 ,如果SVN让B成功提交代码,那么问题就来了,B提交了代码之后,文件的版本会在他本地文件的版本基础上加1,这个时候也是2,SVN绝不允许有两个相同的版本号,于是惯性思维,后面生成版本为2的文件会把前面生成版本为2的文件覆盖掉。20分钟之后A觉得自己写的代码可能存在一些问题,于是就想还原,结果看到的却是B的代码。这就是为什么SVN要为每一个提交代码的用户创建一个新的版本,因为只有这样才能够让他们随时找到自己的代码。
于是上面的问题就迎刃而解了,只要先更新再提交就一定不会出错。
2、为什么更新已经修改的文件会产生冲突?
因为SVN既要保证服务器的代码更新到你本地文件,又要保证你修改的程序不丢失,所以我们就看到了发生冲突的代码混淆在一起。解决这个问题的方法是:先还原代码到之前的版本,然后在跟新到最新版本,最后再把自己先前修改的代码黏贴到文件中,提交即可。
3、何为代码覆盖
这是个值得注意的问题,我们更新文件之后把别人写的代码修改错了,然后提交了,等到别人更新代码后再次运行程序莫名其妙的报错,这一系列操作称之为覆盖。 虽然别人提交的代码会生成唯一的版本一定是可以找到,但是我们还是应该尽量避免出现这个问题。