欢迎您光临本小站。希望您在这里可以找到自己想要的信息。。。

SVN 中trunk、tags、branches使用

架构&设计模式 water 872℃ 0评论

关于SVN中的BranchesTags

版本控制的系统中,我们经常需要对开发周期中的单独生命线作单独的修改,这条单独的开发生命线就可以称为Branches即分支。分支经常用于添加新的功能以及产品发布后的bug修复等,这样可以不影响主要的产品开发线以及避免编译错误等。当我们添加的新功能完成后可以将其合并到主干中。


而Tags即标签主要用于项目开发中的里程碑,比如开发到一定阶段可以单独一个版本作为发布等,它往往代表一个可以固定的完整的版本,这根VSS中的Tag大致相同。


SVN中的Branches以及Tags经常容易混淆,因为在TortoiseSVN中创建方法是一致的,而且它们都是通过存储类似Linux中的lunch快捷方式一样,只是创建了指向某个版本的链接,而不会真正将此版本的内容复制到分支或者标签中,这样既可以节省空间,也可以很快速的创建。


Trunk、Branches、Tags、作用

  1. Trunk

  1. 这是SVN目录的主分支,表示日常开发中的项目,任何时候Trunk里包含的都是最新的开发代码。 这里的代码将会工作到你的下一个主要发布版本。

  2. Trunk应该只被用来开发将会成为你的下一个重要版本的代码。

  3. 几乎常常人们只使用trunk来存放他们的代码。发放了一个版本后继续在其上进行下一版开发。这样开发是混论的,如果出现大的Bug往往不好恢复到之前版本,因此,增加了一个Branches文件

  1. Branches

  1. 有时你想将某个新技术引进项目。这很好,但是你当然不想赌上你的整个项目。想象一下,你想把你的Web程序从PHP4改为PHP5。你要花多少时间?在这期间你的trunk停止使用?直到你把所有到PHP5的转换做完

  2. Experimental branches

  3. 分支也可以用于处理trunk或release branches里发现的严重的Bug。

  4.  Bug fix branches

  5. 当trunk达到准备发布的阶段时(或者你想冻结新特色的添加时),你应该创建一个release branches。

  6. 常用的Branches分支有好几种类型,这里列出常用的几种。

  7.  Release Branches

    1. Tags

    1. 一般情况下,tag,是用来做一个milestone的,不管是不是release,都是一个可用的版本。这里,应该是只读的。

    2. 在SVN中Tag和Branches,在一个选项里面创建时区别不明显,Tags中存放的也是Trunk的一个副本,只不过是只读的,不可以修改,权限不同。



    为了便于创建分支和标签,我们习惯于将Repository版本库的结构布置为:/branches,/tags,/trunk。分别代表分支,标签以及主干。还有一点值得注意的是,SVN不推荐在创建的Tag基础上Revision,这种情况应用Branches,因为Tag一般保持不变不作任何修改。

    1.创建Branch分支或者Tag标签

    当按照推荐的结构创建的版本库,创建分支以及Tag是很容易的。
    在我的SVN服务器上创建了一个版本库Test,结构如下:


    在我的本地签出checkout,添加一个文件test.txt,然后提交。

    加入这个时候我们需要发布一个版本的文件,同时有可能其他人会修改,但我们不能影响当前的文件,只能在其修改好后再合并,这种情况下我们创建一个分支。

    这个时候我们可以发现本地的trunk文件夹的SVN属性的URL已经被Switch到创建的版本的地址了:


    执行SVN更新命令,可以查看到,本地branches文件夹下新增文件夹v1.0以及文件夹里面的文件v1.0


     

    2.修改分支和使用合并Merge功能

    修改branches/v1.0下面的文件test.txt,添加一行modified in branch v1.0.然后签入到SVN服务器中:


    由于刚才我们已经将trunkSVN版本库URL转换到对应的版本,所以这个时候更新trunk文件夹可以看到更新的test.txt文件。


    为了作测试,我们将trunk文件夹switch至对应的trunk地址:


    当switch成功后,我们可以看到trunktest.txt文件的内容并没有任何的更改,这正体现了刚才我们所说的在分支中的修改不会影响到主干。下面修改trunk文件夹下的test.txt,添加一行modified in trunk.然后签入到SVN服务器中:


    最好我们将实现一个重要的功能,就是Merge合并功能,将分支合并到主干中,这也是在团队软件开发中我们经常要使用的功能。
    在TortoiseSVNRevision Graph中可以查看trunk的版本变化图,如下:



    从上图可以得出,在版本10的时候我们创建了分支版本/branches/v1.0,且SVN版本为11,在版本11基础上我们对分支进行了修改于是有了版本12,我们再对trunk下的文件进行修改于是有了版本13,整个SVN目前的版本就为13,这与我们刚才做的修改是相吻合的。
    下面将分支v1.0合并到主干中。
    按照我们目前的情况,选择第二种:

    选择v1.0


    然后,如下:

    在我们的这次合并中肯定会产生问题,因为我们对test.txt文件进行了两次修改,因而会产生冲突Conflict,但这在实践中是不应出现这种情况的,因为建立的分支目的就是修改那些在主干中不会被修改的文件,以便修改完成后合并到主干中。不过没关系,我们这里仅是演示而已,所以只需处理下冲突,手动的将其合并(这在实际中不应该这样否则失去了分支的用途了):



    这个时候可以看到我们的test.txt文件已经按照我刚才手动处理冲突实现了:

    然后将trunk签入到版本库中:

    如果再去查看branches\v1.0下的test.txt文件它的内容依然是最初在trunk中编辑的内容。
    另外再次强调一点:在实际操作中我们不会对一个分支文件在主干中再次进行修改,否则会造成一些冲突,这样就失去了分支的便利性了;Tag的创建与分支是类s似的,只不过Tag往往仅用于标识特定版本,而不会用于bug修复,增加新特性等情形。

     

    转载请注明:学时网 » SVN 中trunk、tags、branches使用

    喜欢 (0)or分享 (0)

    您必须 登录 才能发表评论!