SVN使用总结
安装教程请参考百度。
早晨上班先更新最新代码版本,晚上下班提交今天的代码到svn服务器,每次提交之前先更新因为如果版本过时(此文件被其他人操作并提交导致svn服务器上的文件版本号升级,而本地的文件的版本号是过时的)的话必须更新后才能提交,并且svn会自动把更新下来的文件与本地过时的文件进行合并操作,如果合并操作失败(用户a和用户b修改了同一个文件同一行代码)则为冲突,冲突会在目录多出来三个文件,.mine结尾的是我修改后最终想要提交的文件,.rn(n表示版本号,这里指较小的那一个文件)结尾的文件是相对于冲突没发生之前的最新版本文件,.rn(n表示版本号,这里指较大的那一个文件)是与我修改后最终想要提交的文件相冲突的版本文件(这个文件是当前svn服务器上最新的版本),并且原文件中也会标识出冲突的部分,<<.mine标识我这边所做的修改,>>.rn表示对方所做的修改,中间以==分割。
2016年12月27日18:34:39更新:上面的处理方式有误,现在的我觉得正确的行为应该是这样:
早晨上班先更新最新代码版本,晚上下班提交今天的代码到svn服务器。
我把每次提交之前先更新那句话去掉了,因为如果每次提交之前先更新的话,如果其他人和我修改了同一个文件,而他提交了我还没提交,我准备更新后再提交,这时就有可能出现冲突,会直接生成一堆冲突文件,解决起来相对麻烦,而我直接提交的话即使存在冲突它也不会直接给我生成一堆冲突文件,系统会告诉我哪个文件的哪个地方有冲突过时之类的,我就可以很方便的提前去解决掉即将发生的冲突问题。
项目开发中有时需要操作别人的文件,为了避免代码冲突或覆盖,尽量只往文件中增加新的代码而不动原来的代码结构。
项目开发中有时需要操作别人的文件,为了避免代码冲突或覆盖,尽量只往文件中增加新的代码而不动原来的代码结构。
svn服务器搭建好服务器基本上没什么事,剩下的操作svn客户端工具就行了。
当用户a发现登陆错账号了,可以在客户端工具的设置中进行清除身份验证数据即可重置账号。
要妥善保管服务器搭建的仓库目录,千万不可直接修改此目录文件夹,一旦此目录修改所有连接的用户都将被动。
冲突的解决方式:
当你提交时发现提交的文件是过时的无法提交,这时不要去更新,因为更新会导致冲突,会产生三个冲突文件,解决起来相对麻烦,这时候的解决方案就是不要去更新,而是备份此文件放到别处,然后还原此文件到上一个版本,再去更新,这样更新下来的就是被其他人修改过的提交到服务器上最新的代码文件,而不会产生冲突,剩下的就是把备份的文件和更新下来的这个被修改的文件进行比对,检查我将要提交的这个文件和其他人提交的文件哪里不一样,然后进行修复,修复完毕删除备份文件提交修复的文件。
技巧:
如果其他人改了我的代码而提交了,而我没有注意把代码更新过来了,这时有可能会存在隐患,因为其他人改的代码可能只是他用到的地方是正确的,而我这边的不一定符合的,到后期可能会导致bug出现,然后调试bug发现某处代码被人修改了导致此处bug,这个时候可能已经无法确定是谁修改了这个地方的代码,我们只能通过客户端工具查看此文件的版本历史记录,然后从最新的一版和下面一版进行对比一直到检查到是在哪一版被人修改了,这个人是谁。
2017年2月28日13:36:35更新:其实没必要去纠结是先更新还是先提交的问题,如果另一个用户提交了新的版本,那么你必须去更新,否则你将会在提交时收到版本过时的警告,提示你去进行版本更新,这种情况你要小心了,因为很有可能更新的数据和本地冲突(比如:你的本地文件和服务器上的文件内容有地方不统一,如果不同的内容没有重叠在一行那么svn会自动进行合并操作,如果不同的内容重叠在了一起,那么这就冲突了,所以我们不用担心更新会被覆盖的问题)。
也没必要纠结我提交的代码会不会被其他人给覆盖的问题,因为一般情况下当你的代码提交后,其他人得到你的代码后只是往里面增加内容,这样因为多个人在操作同一个文件,所以有较大的几率出现冲突,但不会出现覆盖的情况,除非别人故意把你的代码删了给改成他的代码。
导出svn文件:tortoiseSVN ->export->选择一个目标文件夹,点击确定默认情况下只导出当前svn目录下存在版本数据的文件(被svn控制的那些文件),选择目标文件夹时有一个选项“Export unversioned files too”可以同时导出没有版本数据的文件。这很方便就拷贝了一份svn项目,并且没有.svn文件夹,仅仅导出版本控制的那些文件数据,不包含svn元数据。