活用SVN-trunk/branches/tags

来源:互联网 发布:牛津简明英语词典 知乎 编辑:程序博客网 时间:2024/06/06 18:22

前文链接:SVN与VSS并用进行代码管理

之前提及到了用SVN来辅助VSS进行代码管理,今天又看到了一个神奇的事情,因为要发布一个版本,把一整个文件夹直接铲了…而VSS会直接关联,我打开这个工程的时候一直报错,我才去看了一下整个工程都被爆破了….整个人直接一脸懵逼…

SVN的一个好处是,trunk/branches/tags是真的好用。建议开发项目在新建repository的时候选择默认的trunk/branches/我之前曾经问过我的以前的组长,我们有很多差异化的工作是不是可以用branches来进行,然而组长提及说可能会非常的麻烦,我今天看了一下,可能在文件多的时候的确很容易有问题,不过总体感觉应该还是可行的。
参照今天这种惨案,如果是用SVN进行管理的话,原则上是这样子的:
1. 可以上production的版本应该提交完毕并且打一个tag。如果要发布,直接check out这个tag的文件进行发布即可。
2. 我现在的代码应该是在当前版本新开一个分支进行,然后进行我的修改,等所有修改都确认可行之后再合并到trunk上面去。
3. 如果发布的版本需要修改,又不想影响已经提交的代码,应该直接打一个分支,然后进行修改,然后再发布。确认这些代码是可以合并到主分支的,就合并;如果要维持的,就在分支上继续进行并写好日志。

今天尝试操作了一下,应该是这样的。
1. 对本地的工作目录打分支:
1.1 确保当前工作目录代码都是最新的,或者有修改的话,保存副本然后revert到服务器当前最新的版本,然后右键工作目录 - SVN - branches/tags(分支/标记),进行分支创建。
创建分支
1.2 在To Path(至路径)中填写需要打分支的路径(一般是/branches 下相同的文件/文件夹名即可),然后指定需要导出的版本,填写日志信息即可。
选择具体版本和路径
1.3 Tags是类似的,只是To Path填写/tags下的路径,一般Tags都是打版本号或者类似的了。
1.4 check out branches/tags。 一般在branches或者tags直接右键更新就可以了,当然也可以checkout到其他地方,只需要checkout的路径填写当时打分支的那个ToPath即可。
选择tags或者branches进行check out
如果是从tag打一个分支,那么可以在已创建的tag那里同样选择branches/tags,然后To Path设置为branches的路径即可,那么这个branches的工作基础就是那个tag的版本。

  1. branches和trunk的联系
    2.1 branches保持与trunk同步。如果这个branches会长时间进行,那么建议定期与trunk进行同步,避免后面合并的时候会有大量的冲突,另外,branches也不建议一直持续开发,除非已经和trunk功能独立或者基础不同需要并行开发;
    2.2 从SVN1.8开始,网络上大部分的合并流程都不能用了,原因是在于reintegrate这个option好像没有了,只能用Merge a range of revisions进行合并了,但是效果是一致的。
    2.3 选择合并
    合并
    2.4 选择合并一个版本范围
    合并一个版本范围
    2.5 合并的源根据情况选择,如果是从branches合并到trunk,那么源就是填写branches的路径;如果是从trunk合并到branches,那么源就是trunk的路径。
    2.6 选择将要合并的版本范围。一般来说branches合并到truck都是全合并,可以选择所有版本;但是有不少情况可能只需要同步某几个版本的功能,所以可能需要选择版本的范围。如果源是branches,那么日志只会显示branches的日志,反之是trunk的话亦然。
    merge range
    2.7 测试合并。点击下一步之后会有合并选项,一般保留默认即可。然后可以点击测试合并看一下合并之后的结果,有可能会有冲突,也有可能相安无事。如果有冲突的话,最好先备份本地文件,然后合并,解决冲突之后再与本地文件对比一下。
    test merge
    这样合并就完成了。最重要的是定期同步的话,对同步进行的分支工作开展非常必要,例如trunk在修bug,而branches在开发新功能,那么修bug的同事就不需要顾虑新功能带来的各种隐患;而branches也能同步知道trunk的工作进度,在合并的时候差异化就不会太大。

在对于有大量代码同时开发的情况下,其实本身svn就已经是一个很好的选择,定期update之后再提交就不会有太大的问题。如果一个重要的功能大家都会同步进行修改的话,特别是修bug和新功能并行的话,我觉得还是直接开branches进行新开发会更好。

另外,说明一下是,按照svn的说法,分支仅仅是简单复制,大体类似打了一个软链接的样子,并不会实际多创建一堆副本的,所以不用担心。

0 0
原创粉丝点击