SVN 版本控制工具

时间:2023-01-18 15:23:30

1,安装完服务端VisualSVN Server和客户端TortoiseSVN 后,随便在一个文件夹下,右键,会看到有SVN checkout 选项,这个选项只有在第一次在仓库下下载的时候会用到;

1)checkout的第一个路径:,如果客户端SVN和服务端SVN是装在同一台机器上:当选择checkout时,第一项需要选择一个服务端仓库路径:到SVN服务端选中某个仓库,被选中后,窗口顶部会出现一个路径,改路径就可以填写在checkout的第一项空格里;

如果客户端SVN和服务端SVN 不是在同一台机器上,甚至不是在一个局域网内,而是通过公网去访问,此时上面的路径中的计算机名就要改成IP地址+端口号的形式(ip地址就是服务端所在的公网ip,端口号就是服务端安装时显示的端口号);

2)checkout的第二个路径:是希望将checkout放在本地磁盘的哪个路径,如果希望存到文件夹里,不必新建一个文件夹,直接写文件夹名字,若检测到没有,会自动创建的;这个文件夹是用来和服务端联系的文件夹Test;在这个Test文件夹下,可以进行各种关于SVN客户端的增删改查操作;

3)填写完后,会出现一个Accept the certificate permanently  的提示,选择上面的Accept the certificate permanently提示,以后就不会出现了,再继续,会出现填写用户名和密码,填写曾经在服务端创建的User用户名,密码即可;并且选中左下角的方框,否则下次还会要求你输入;

4)完成后,打开checkout在本地磁盘的路径的文件夹下,会有.svn文件夹,若没有,则应该去设置“文件夹选项”--查看-->把隐藏文件夹选项 不要选中 ,就会显示出来了

3,SVN的基本操作:都要通过commit与服务端联系;

1)新增(提交)文件:在Test文件夹下,新增一个文件Test.java,会显示蓝色的问号,表示客户端和服务端有差异了,客户端多了一个等待提交的文件;在当前Test文件夹下,右键,点击SVN commit 提交,然后在弹出的对话框下部,选中java文件,OK;然后该文件的图标从蓝色的问号变成绿色的对号,并且在服务端建好的仓库Test下,会看到提交上来的java文件;

2)删除文件:直接在(磁盘里删除)Test文件夹下,右键删除即可,此时,在刚才提交java文件的对话框中,java文件显示为红体字,显示为missing,表示客户端删除了该文件,但服务端还存在该文件,这时,只要将其再次选中,OK,即在服务端将该文件也删除了;

3)修改文件:在Test.java文件里面写几行代码保存后,该文件图标变成红色的感叹号;这个文件与服务端的java文件不同,可以通过查看服务端的该文件,右键点击Browser(通过浏览器查看,会提示输入用户名和密码,输入在服务端创建的用户名,密码即可);

再在Test文件夹下,右键单击SVN commit提交,然后弹出的对话框显示此时的该文件是modified状态;选中提交即可;图标会变成绿色的对号,表示提交成功;

SVN 版本控制工具

SVN 版本控制工具

 

4,SVN常见问题一:其他人的代码覆盖了自己的;

在服务端创建了A和B两个用户,现在清空A的权限(在文件夹下,右键点击TortoiseSVN->settings->点击clear all即可),使B来进行操作,让B来下载A已上传的文件Test.java(因为实际工作中,就是会同时有很多人共用一个项目),接下来让A操作Test,B操作B的Test,再次返回到Test文件夹的上级目录,右键Checkout一个B的Test文件,起名为B_Test,此时因为清空过权限,会再次弹出Accept the certificate permanently,选中后,此时,不要点击左下角的保存权限了,因为A和B 来回切换,要经常改用户名和密码;checkout之后,就会发现B_Test文件下也将Test.java下载下来了;

SVN 版本控制工具

SVN 版本控制工具

每天上班第一件事就是SVN update更新代码,下班前第一件事就是SVN commit提交代码

由于多人共享一个项目文件,A的代码可能会被B无形之中改成自己的代码;A如何找回自己的代码呢?

右键点击TortoiseSVN->show logs(查看历史记录):

SVN 版本控制工具

想要将A的文件修复,就在A的文件上右键,点击Revert to this version ,弹出对话框在,再revert即恢复到这个版本了;

操作完之后,再查看Test.java文件,会发现内容又变回A编辑的内容了;不要忘记然后再右键提交即可;

2)填写修改的原因:在提交时出现的对话框的上半部分,填写修改原因;

如:B又一次改写代码,在原来的基础上添加了一个S;z在提交时,应该注明原因;

SVN 版本控制工具

3)B又一次将文件给删除了,A到自己的Test文件夹下,SVN update后,发现java文件已被删除了,此时,没有办法直接在被修改的文件上show log了,可以直接在根目录Test下 ,右键点击TortoiseSVN->show log就会发现所有的更改记录;

SVN 版本控制工具

会发现最后一次操作是B操作的,在对话框的下半部分,显示是delete删除操作;再找到对应的以前的文件保存到本地Test目录下,再次提交即可;

4)自从第一次提交文件后,文件就会保存到本地磁盘的仓库Resposity中,只要这个仓库存在,就没问题;

SVN问题二:A和B同时修改代码,但是修改的不是同一行(同一个地方)

1)A和B 同时修改了文件,但B先提交了,当A提交的时候,就会报错:已过时,

SVN 版本控制工具

会提示你进行更新:

SVN 版本控制工具

按提示点击更新:

SVN 版本控制工具

 

会提示Merged,是因为,B已经提交过了,两个文件可能已经合并了;再点击OK继续提交即可; 

此时再查看已提交的java文件,变成了A和B 原来提交的代码合成之后的代码;这种情况称为SVN的自动合并;

 3,SVN问题三:A和B同时修改代码,并且修改的是同一行(同一个地方),此时就不会像上一个问题一样SVN自动合并了;

B先提交了,然后等到A提交的时候,还会报错:

SVN 版本控制工具

点击OK,提示更新,按步骤点击更新:

SVN 版本控制工具

这时会提示,文件发生矛盾conflicted:

 SVN 版本控制工具

同时在根目录Test文件夹下,除了Test.java文件外,新增了三个文件:

SVN 版本控制工具

此时,Test.java文件的图标变成了黄色的感叹号,说明SVN已经不能自动合成了;此时就不要再点击OK提交了;而是如下操作;

 Test.java.mine文件是自己想要改成的代码(自己修改后的代码);

Test.java.r13文件是自己修改之前认为它是自己修改之前的最新版的代码;

Test.java.r15文件是自己修改之前真正的(B修改后的,真正的被认可的)最新版的代码;(数字越大版本最新);

此时只要确定需要那个版本的代码,然后修改即可,注意:不要随便在某个文件里面改动(如Test.java.r13等);假如想留下自己的(Test.java.mine)代码,只要将该文件复制到别处(如桌面),然后重命名为Test.java然后粘回来,覆盖Test.java.mine文件->覆盖之后变成带有黄色感叹号的Test.java文件,再右键,点击Tortoise SVN ->revert->点击OK:会看到,文件恢复成功,并且多余的三个文件也消失了;

SVN 版本控制工具

3,SVN问题三:

A更改且添加了代码,B也更改且添加 了代码,更改的地方也相同,此时假如B先提交了,当A 提交的时候,显然还会出现conflicted矛盾的问题,此时执行到:

SVN 版本控制工具

就不要继续更新了,因为我们知道更新的话,会出现多余的三个文件;此时先取消更新,随之弹出的对话框也取消;

回到当前的的根目录下,将自己的要提交的文件复制到别处(如桌面)并且重命名(否则要提交的文件会丢失),然后再粘回来,

对以前的带红色感叹号的Test.java文件先进行恢复(右键-点击Tortise SVN -revert)恢复到以前的版本变成绿色的对号的图标,然后再更新SVN update(因为B已经提交过了,更新一下,查看和A自己的有什么不同);更新完后,选中两个文件,右键->Tortise SVN ->Diff->:

SVN 版本控制工具

带背景颜色的地方就是不同点;回到 根目录下,将需要留下的不同的代码复制粘贴到Test.java里面,然后将其提交,此时保存自己代码的另一个文件可以删除了;此时提交后的文件就是A和B的代码的合并了;同时B 要记得去更新代码(因为另一方已提交过了);

 另一种情况就是:B又将A曾经添加的方法内容进行了修改,A呢却一直没发现,就这样不同的人无论是A或是B有可能还有别人一直在开发提交,到最后终于发现了,此时需要找到是谁修改的,与之协商并解决,在根目录下,右键,单击Tortise SVN-点击show log-对比查看何时何人进行了修改(同时选中两个版本,右键-compare revisions,可以看到,点击文件可以看到区别,发现是否更改),再进行解决即可;