基于windows平台的SVN教程( 二 )


当下一个版本/阶段的开发任务开始时,继续在trunk进行开发 。此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了 。解决方法是基于发行版对应的tag,做相应的分支(branch)进行开发 。
2)下图为struts2的SVN仓库目录:

基于windows平台的SVN教程

文章插图
 
现在Struts2的代码使用git管理,所以现在查看Struts2的SVN仓库是空的 。
四、TortoiseSVN的使用
TortoiseSVN是现在最流行的SVN客户端工具,使用图形化界面和SVN仓库交互(作为命令行方式的替代) 。关于TortoiseSVN的安装省略 。
安装完成后,在任意位置右击都能看到TortoiseSVN选项 。
1、基本操作
1)创建仓库
创建目录:E:svnreporepoDemo2,进入该目录下,右击 — TortoiseSVN — Create repository here,并创建默认的SVN目录结构,如下图所示:
基于windows平台的SVN教程

文章插图
 
2)检出:checkout
在E盘下建立user3、user4两个目录,模拟两个协同工作的用户的workspace 。
进入user3目录下,右击 — SVN Checkout,在URL of repository中输入:file:///E:/svnrepo/repoDemo2 。【此时仓库还没有启动SVN服务,所以使用file://】
基于windows平台的SVN教程

文章插图
 
3)提交:commit
在user3/trunk目录下新建Demo1.java,在该文件上右击 — TortoiseSVN — add,则将Demo1.java纳入版本控制 。然后右击 — SVN Commit,提交至代码仓库 。
4)更新:update
对user4进行上面的检出操作 。并修改user4目录下的Demo1.java(如增加一个字段),并commit 。
回到user3/trunk,右击 — SVN Update 。
5)启动SVN服务 。这步需要在命令行中输入:svnserve -d -r E:svnrepo
6)访问SVN仓库 。在任意空白位置右击 — TortoiseSVN — Repo browser,URL输入:svn://192.168.1.6/repoDemo2即可浏览SVN仓库中的内容,如下 。
基于windows平台的SVN教程

文章插图
 
2、其他操作
下面的操作都位于右键菜单的TortoiseSVN中 。
1)删除:delete
删除文件或目录,不能直接用Windows的删除命令来操作,那样只是没有显示出来,实际并没有删除,在更新后,删除的文件又会被更新出来的 。要想从库中删除,必须选中你要删除的内容,TortoiseSVN — delete,这样才会将这个文件标记成要删除的 。确认需要删除后,使用前面所讲的提交命令,就会真正的在库中删除了 。
2)重命名:rename
重命名也不能直接用Windows的重命名命令来操作,必须选中你要重命名的文件,TortoiseSVN — rename 。修改后提交就可以更新到仓库 。
改名的处理方式相当于新增了一个以新名称命名的文件,原名称命名的文件进行了删除 。
3)还原:revert
在未提交之前,你对前面做的操作反悔了,可以使用revert来恢复 。
4)检查更新:Check for modifications
① 此功能可以显示你所做的修改有哪些还没有提交的 。② 还可以看到版本库里的改动,即别人提交了哪些文件的改动,你还没更新到本地 。
5)导出:export
使用SVN的工作空间每个目录下面都有一个.svn隐藏目录,利用SVN的export命令可轻松地导出不含.svn目录的工作空间 。
3、冲突问题的解决(☆)
何时发生:接着4.1节中的操作,假设user3和user4目录下的Demo1.java都更新到了最新版本 。user3修改Demo1.java,提交至仓库 。若user4也修改Demo1.java并提交,此时user4的TortoiseSVN会报提交版本过时的错误,并提醒user4需要更新,更新时就会发生冲突 。如下图:
基于windows平台的SVN教程

文章插图
 
对于每个更新冲突的文件,Subversion会在冲突文件所在目录下放置了三个文件:
  • Demo1.java.mine:发生冲突时的本地版本 。
  • Demo1.java.r3:最后更新之后的本地版本 。
  • Demo1.java.r4:仓库中的最新版本 。
解决方法 1:
① 在Demo1.java上右击 — TortoiseSVN — Edit conflicts,这时你需要确定哪些代码是需要的,做一些必要的修改然后保存 。小技巧:编辑冲突时,可使用直接复制需要的代码到Merged窗口即可 。
② 编辑完成后保存,直接选择Mark as resolved,即标记为冲突已解决 。退出编辑冲突窗口,发现冲突发生时生成的三个文件被自动删除了,且Demo1.java变成了未提交状态 。


推荐阅读