翻译者:zwws
原 文: SVN trunk, branches and tags
译 言:http://article.yeeyan.org/view/132319/81358
转载请注明原链接 ,谢 谢。
因水平所限,如果翻译得和原文有差,敬请评论指正。
在本篇文章中, 我将会详细说明我是如何应用SVN trunk(树干)、branches(分支)和tags(标记)。这种方法同样被称为“branch always”,两者非常接近。可能我所介绍的并不是最好的方法,但是它会给新手一些解释说明,告诉他们trunk、branches和tags是什么, 并且该如何去应用它们。
当然,如果本文有些要点需要澄清/确认,亦或者有一些错误的观点,还请你评论,自由发表自己的观点。
——简单的对比
SVN的工作机制在某种程度上就像一颗正在生长的树:
- 一颗有树干和许多分支的树
- 分支从树干生长出来,并且细的分支从相对较粗的树干中长出
- 一棵树可以只有树干没有分支(但是这种情况不会持续很久,随着树的成长,肯定会有分支啦,^^)
- 一颗没有树干但是有很多分支的树看起来更像是地板上的一捆树枝
- 如果树干患病了,最终分支也会受到影响,然后整棵树就会死亡
- 如果分支患病了,你可以剪掉它,然后其他分支还会生长出来的哦!
- 如果分支生长太快了,对于树干它可能会非常沉重,最后整棵树会垮塌掉
- 当你感觉你的树、树干或者是分支看起来很漂亮的时候,你可以给它照张相,这样就就可以记得它在那时是多么的赞。
——Trunk
Trunk是放置稳定代码的主要环境,就好像一个汽车工厂,负责将成品的汽车零件组装在一起。
以下内容将告诉你如何使用SVN trunk:
-
除非你必须处理一些容易且能迅速解决的BUG,或者你必须添加一些无关逻辑的文件(比如媒体文件:图像,视频,CSS等等),否则永远 不要在trunk直接做开发
-
不要因为特殊的需求而去对先前的版本做太大的改变,如何相关的情况都意味着需要建立一个branch(如下所述)
-
不要提交一些可能破坏trunk的内容,例如从branch合并
-
如果你在某些时候偶然间破坏了trunk,bring some cake the next day (”with great responsibilities come… huge cakes”)
——Branches
一个branch就是从一个SVN仓库中的子树所作的一份普通拷贝。通常情况它的工作类似与UNIX系统上的符号链接,但是你一旦在一个SVN branch里修改了一些文件,并且这些被修改的文件从拷贝过来的源文件独立发展,就不能这么认为了。当一个branch完成了,并且认为它足够稳定的时 候,它必须合并回它原来的拷贝的地方,也就是说:如果原来是从trunk中拷贝的,就应该回到trunk去,或者合并回它原来拷贝的父级branch。
以下内容将告诉你如何使用SVN branches:
-
如果你需要修改你的应用程序,或者为它开发一个新的特性,请从trunk中创建一个新的branch,然后基于这个新的分支进行开发
-
除非是因为必须从一个branch中创建一个新的子branch,否则新的branch必须从trunk创建
-
当你创建了一个新branch,你应当立即切换过去。如果你没有这么做,那你为什么要在最初的地方创建这个分支呢?
——Tags
从表面上看,SVN branches和SVN tags没有什么差别,但是从概念上来说,它们有许多差别。其实一个SVN tags就是上文所述的“为这棵树照张相”:一个trunk或者一个branch修订版的命名快照。
以下内容将告诉你如何使用SVN tags:
-
作为一个开发者,永远不要切换至、取出,或者向一个SVN tag提交任何内容:一个tag好比某种“照片”,并不是实实在在的东西,tags只可读,不可写。
-
在特殊或者需要特别注意的环境中,如:生产环境(production)、?(staging)、测试环境(testing)等等,只 能从一个修复过的(fixed)tag中checkout和update,永远不要commit至一个tag。
-
对于上述提及到的环境,可以创建如下的tags:“production”,“staging”,“testing”等等。你也可以根 据软件版本、项目的成熟程度来命名tag:“1.0.3”,“stable”,“latest”等等。
-
当trunk已经稳定,并且可以对外发布,也要相应地重新创建tags,然后再更新相关的环境(production, staging, etc)
——工作流样例
假设你必须添加了一个特性至一个项目,且这个项目是受版本控制的,你差不多需要完成如下几个步骤:
-
使用SVN checkout或者SVN switch从这个项目的trunk获得一个新的工作拷贝(branch)
-
使用SVN切换至新的branch
-
完成新特性的开发(当然,要做足够的测试,包括在开始编码前)
-
一旦这个特性完成并且稳定(已提交),并经过你的同事们确认,切换至trunk
-
合并你的分支至你的工作拷贝(trunk),并且解决一系列的冲突
-
重新检查合并后的代码
-
如果可能的话,麻烦你的同事对你所编写、更改的代码进行一次复查(review)
-
提交合并后的工作拷贝至trunk
-
如果某些部署需要特殊的环境(生成环境等等),请更新相关的tag至你刚刚提交到trunk的修订版本
-
使用SVN update部署至相关环境
分享到:
相关推荐
如果在`trunk`或`branches`上发现了需要修复的bug,可以在`branches`上修复,然后从对应的`tag`到`branches`的最新版本进行合并,以确保历史版本的修改被正确记录。 在实际操作中,以下是一些典型场景的应用: - *...
当需要建立 branch 或 tag 时,可以使用 SVN 中的 copy 操作,例如,从 trunk 中 copy 到 branches 中,或者从 trunk 中 copy 到 tags 中。 权限控制 在 SVN 中,可以使用 authz 文件控制目录的访问权限。例如,...
本文将深入探讨 SVN 中的 trunk、branch 和 tag 三个核心概念,以及它们在实际开发场景中的应用。 首先,trunk(主干或主线)是项目的主要开发分支,代表了项目的最新稳定状态。新功能的开发通常在这个分支上进行,...
但需要注意的是,SVN 不推荐在创建的 Tag 基础上 Revision,这种情况应用 Branches,因为 Tag 一般保持不变不作任何修改。 SVN 中的 Branches 和 Tags 都可以帮助开发者更好地管理代码的版本,并且可以避免编译错误...
通过对SVN中Trunk、Branch、Tag的概念及使用方法的介绍,我们可以更好地理解如何高效地使用SVN来进行版本控制。遵循这些约定能够有效提升团队协作效率,减少代码冲突,确保项目的稳定性和可持续发展。
资源中有 SVN 主干(trunk)、分支(branch )、标记(tag) 的详细解释,和作用 并带 SVN分支与合并 的详细操作文档(附图)。 SVN分支与合并的总结 1.分支(branche)的创建。 1、分支创建是建立在主干上的。 2、创建...
- **创建分支**:在 `trunk` 的 `examples1` 目录中选择 “Branch/tag”,然后指定分支路径为 `branches/examples1` 并添加相应的注释信息。 ```bash # 创建分支 svn copy ...
svn copy http://your_svn_server/trunk http://your_svn_server/tags/my_tag -m "Create tag for version 1.0" ``` 在这个例子中,我们从/trunk/目录复制了一个版本到/tags/my_tag/目录,并附带了一个日志信息。 ...
在SVN中,有三个重要的概念:`trunk`、`branches` 和 `tags`。 - **Trunk**(主干):代表的是项目的主要开发线路。通常情况下,所有的日常开发活动都是在这个主干上进行的。 - **Branches**(分支):是从主干或者...
- **示例**:`svn copy http://example.com/repo/project/trunk http://example.com/repo/project/branches/mybranch` 11. **svn delete (rm)** - **作用**:删除工作副本中的文件或目录。 - **示例**:`svn ...
- 创建代码库时,可选择是否自动创建trunk、branches、tags子目录 - 添加用户,如Developer1、tester1、manager1,并设置权限 - 对用户或用户组进行权限分配,如starter、tester1为只读,Developer1和manager1为读写...
3. 使用SVN trunk的原则: - 开发大型项目时,不应直接在trunk中进行开发,而是应在分支上完成新功能或修复,然后合并到trunk。 - 对于特殊需求或定制版本,应在分支上开发,避免对主线代码造成过多影响。 - 提交...
svn copy https://your-repo-url/trunk https://your-repo-url/branches/feature-X -m "Creating branch for feature X development" ``` 这将在仓库中创建一个新的分支,并记录这次操作为一次提交。 2. 工作...
1. 使用TortoiseSVN客户端工具的`Branch/Tag`功能,选择本地trunk项目,然后指定新的分支或标签路径,点击OK完成操作。 2. 在SVN服务器的对应分支或标签目录下直接创建新文件夹,然后将trunk中的稳定版本代码复制...
1. **初始化目录结构**:根据项目需求初始化`trunk`、`branches`、`tags`目录结构。 2. **Version 1.0 开发**: - 在`trunk`上进行初始版本1.0的开发工作。 - 版本开发完成后,给版本1.0打标签:`tag_release1.0...
SVN的库结构通常包括三个主要部分:`trunk`(主开发线)、`branches`(分支)和`tags`(标签)。`trunk`是开发的主要路径,存放稳定且持续更新的代码。`branches`用于创建并处理新功能或修正错误,不影响主开发线。...
### SVN如何建立版本分支 #### 一、理解SVN中的版本控制结构 在Subversion (SVN) 中,为了有效地管理项目的开发流程和版本控制,通常会在项目版本库中建立以下三个主要的目录: 1. **Trunk**:作为项目的主干分支...
- `svn copy` 和 `svn tag`:创建分支和标签。 5. **图形界面工具** - TortoiseSVN:Windows平台常用的图形化SVN客户端,直观易用。 - SmartSVN:跨平台的高级SVN客户端,提供更多高级功能。 6. **协同开发** ...
1. **主干与分支管理**:在SVN中,主干(trunk)是主要的开发线,而分支(branches)则用于隔离特定的功能开发或维护。分支上的修改不会影响主干,完成分支工作后,可通过合并(merge)将分支的改动回溯到主干。 2....