在Ecplise中使用SVN

一、SVN 和 Git

SVN 和 Git 都是优秀的版本控制工具,但是两者有较大的差别。

SVN

  • 优点:最突出的特点是集中式管理,代码统一提交到指定的服务器,同时服务器会对文件权限做访问控制。

  • 缺点:对服务器的性能、稳定性要求较高,服务器相当于枢纽,如果宕机会造成较大的影响。SVN 的分支管理不灵活,每一个分支都是一个完整的目录,操作分支需要与服务器同步,不能本地化操作,带来的问题是,团队的成员需要被动进行同步。

Git

  • 优点:最突出的特点是分布式管理,在本地可以进行完整的版本控制。git 分支的本质是一个指向提交快照的指针,速度快、灵活,分支之间可以任意切换,可以在本地进行操作可以不同步到远程。

  • 缺点:Git 的文件没有严格的权限控制,工作的目录只能是完整的文件目录,而 SVN 可以单独 checkout 某一个有权限的目录。

总结

SVN 一般用于商业的团队项目开发。Git 配套 GitHub,用于开源项目。

二、SVN 的使用

SVN 的使用比较简单,网上可以找到很多博客,在这里主要说一下多人合作带来的代码冲突问题分支合并问题该如何解决。

三、代码冲突问题的解决

代码冲突是指:A 和 B 同时修改了某一个类的代码,修改完后,我们假设 A 先提交了代码,此时,B 的代码将发生代码冲突无法上传,因为对于发生冲突的地方服务器无法决定使用谁提交的代码。如果 B 想继续上传代码到服务器,将不得不解决代码冲突的问题。

基于以上前提,代码冲突的解决有 4 种情况:

  • ① 以 B 的代码为准,把服务器的代码覆盖掉。

  • ② 以服务器的代码为准,把 B 本地的代码覆盖掉。

  • ③ 以 A、B 修改前的版本为准,把同时取消 A、B 的修改。

  • ④ 由 B 比对发生冲突的代码行,兼顾 A、B 修改的代码。(最常用

在发生代码冲突后,点击Windows -- Show View --Synchronize,调出Synchronize视图,然后右键项目根目录--Team--资源库同步,此时在Synchronize视图的冲突文件会变为 4 个,例如:Test.java Teat.java.mine Test.java.r2 Test.java.r3

第 ① 种情况解决方式

右键Test.java--标记已解决(Mark Resolved)--Resolve the conflict by using my version of the file.--OK

第 ② 种情况解决方式

右键Test.java--标记已解决(Mark Resolved)--Resolve the conflict by using the incoming of the file.--OK

第 ③ 种情况解决方式

右键Test.java--标记已解决(Mark Resolved)--Resolve the conflict by using base version of the file.--OK

第 ④ 种情况解决方式

右键Test.java--编辑冲突(Edit Conflicts)--编辑左边的Test.java--保存--右键Test.java--标记已解决(Mark Resolved)--Conflicts have been resolved in the file.--OK

四、分支合并问题的解决

正常情况下,一个项目会有 3 种不同类型的分支:trunk 分支、branches 分支、tags 分支。
trunk 分支:作为主分支,日常的开发在此进行。
branches 分支:存放阶段性的 release 版本,可以接着开发和维护。
tags 分支:存放已发布的版本,一般不会修改。

分支合并一般有以下几种 merge type(不同版本的 Ecplise 会有出入):

  • ①Merge a range of revisions
    翻译翻译:把 A 分支的代码合并到 B 分支


  • ②Change-set based merge
    翻译翻译:用于将修复程序反向移植到发布分支。需要安装插件。


  • ③Merge two different trees
    翻译翻译:用于合并两个不同的 URL,URL 可以来自同一个项目(tree),也可以来自不同的项目(tree)。


  • ④Manually record merge information(block one or more revisions)
    翻译翻译:手动指定某一分支不需要合并的文件,然后进行合并。


  • ⑤Manually remove merge information(unblock one or more revisions)
    翻译翻译:手动指定某一分支需要合并的文件,然后进行合并。


下面以:同一个项目的两个分支 trunk、branches,将 trunk 分支的代码合并到 branches 分支,为例说明:


第 ① 种分支合并方式

切换到branches分支--右键根目录--Team--合并--选择Merge a range of revisions--不要勾选Perform pre-merge best practices checks--Merge from选择我们的trunk分支--Revisions处选择All eligible revisions--Finish--分支合并完毕

第 ② 种分支合并方式

目前没用过。

第 ③ 种分支合并方式

切换到branches分支--右键根目录--Team--合并--选择Merge two different trees--在From处填入我们的branches对应的URL--选择HEAD Revision(最新版本)--在To处填入我们的trunk对应的URL--选择HEAD Revision(最新版本)--Finish--分支合并完毕

第 ④/⑤ 种分支合并方式

目前没用过。

参考

[1] 版本控制工具-git 和 svn:https://baijiahao.baidu.com/s?id=1621743840312073288&wfr=spider&for=pc

[2] Eclipse 中解决冲突详解:https://blog.csdn.net/uniqueweimeijun/article/details/81143165

你可能感兴趣的:(在Ecplise中使用SVN)