在使用svn的时候我们往往有这样的需求。我们修改某些代码,因为对某项技术不是非常的熟悉,担心自己当前的修改(或者叫测试)会影响到服务器中版本库代码的崩溃等。传统做法我们会手动复制一份代码,然后修改如果修改成功则提交到服务器版本库,否则直接删除。
这样做一定程度上满足了要求,但一个问题是在你进行测试修改的时候版本库可能已经更新了n个版本了。那当你的实验完成后再提交到版本库区的时候就可能会有非常多的冲突。而且在你实验的过程中可能也会有很多的中间结果需要保存,如果无法提交,那一旦自己机器出现任何问题都可能会造成之前的努力前功尽废。
于是svn里面就有了分支这样的一个概念,不单是解决这个问题。还有满足了代码访问权限的控制,以及开发小组的再划分。在svn中,我们要做一些测试性的开发。只需要主干文件夹上右键:
就能在svn服务器上建立一个分支了,然后我们需要将该分支的代码checkout出来,checkout的url只到https://127.0.0.1/svn/OnlyForTest/branches/xm_20110119
相当于在本地复制了一份代码到branches文件夹的xm_20110119文件夹,然后开发的时候我们是针对xm_20110119下的代码做的测试开发。其中的commit和update和没有建立分支的情况一样。不同的是你commit和upadate针对的都是https://127.0.0.1/svn/OnlyForTest/branches/xm_20110119 这一分支所做的任何修改都不会影响到其他分支。
当你修改完之后,想要将修改的效果体现到主干分支的时候我们要执行的操作是,在主干文件夹上右键,TortoiseSVN---Merge…
此时你本地的主干文件夹中的代码就得到了你分支中进行修改后的效果,但只是你本地的进行了变化,要想真正的体现到所有的用户,我们需要在主干文件夹上再进行commit操作。
另一个需求是,我们在分支上所做的修改需要比较长的一段时间才能完成,在这过程中主干中的代码可能更新了无数个版本了,当我们代码修改完成时候与主干上的代码差别可能就会非常大,就可能会造成冲突的情况。这种情况怎么处理呢?
svn还提供了一个将主干文件夹(本地)代码合并到分支上来的功能,注意合并过来的只是本地的主干文件夹的代码,因此要确保主干文件夹上的代码就最新,即我们需要经常的进行upadate操作。操作是在分支根目录上右键:
另:对于分支如果是个人开发的测试,基本上不用commit的,除非需要备份或者保存一些中间结果。否则,只需要在修改完成的时候合并到主干代码文件夹,然后由主干进行统一commit就可以了.