posts - 262,  comments - 221,  trackbacks - 0

【18】创建分支


在企业级产品的开发过程中,除了通用产品之外,有时会存在一些需要根据客户实际情况进行“定制化”的情况。假设现在我们产品的代码存放在/.../trunk目录下,客户需要的定制化需要修改源代码,而且未来的时间还会有不断的需求提出。

此时就给我们带来了一个问题了:假如我们为了完成客户的定制化要求,直接在/trunk下修改源代码然后提交。那么会直接影响到其他通用产品。所以我们本能的想法就是:再创建一个源代码的拷贝,然后对这个拷贝进行独立修改。以一个独立项目的形式进行版本控制。

这样的想法很好,但是又带来了一个潜在的问题:假如现在发现在/trunk目录的源代码存在重大bug,需要马上修正并更新到所有的分组去这样的工作怎么做?

和其他版本控制工具一样,SVN也提供了分支的概念。“分支”实质上也是一个普通的版本库中的目录。不同的是它是从其他主干或分支复制而来,它和主干或其他分支“共享”了一段相同的版本历史,然后在它被创建之时起又有了它独立的版本历史。

现在我们来模拟“分支”创建的过程和应用。假设经过一段时间开发和测试之后,ECoupon项目已经成熟。此时项目负责人决定在版本库上开放一个ECoupon_GA目录,在这个目录下包含了三个子目录:

C:\>svn list http://localhost:8000/svn/Workspace/Ericsson/ECoupon_GA --depth=infinity
branches
/
tag
/
trunk
/
trunk
/paul/

现在我们需要做的事情包括:
 A.把ECoupon项目的代码Import到ECoupon_GA项目下
 B.为ECoupon_GA项目创建一个分支,位置在/branches/paul下

关于第一个问题很好解决,有两种方式:
 A.从本地的E:\Temp\ECoupon项目下导出代码,再导入到ECoupon_GA/trunk目录下
 B.从版本库的ECoupon下拷贝到ECoupon_GA/trunk目录下

下面我们来试一下使用svn copy命令来直接从版本库拷贝的做法。还记得我们在前面提到的svn copy URL URL的用法吗?

C:\>svn copy http://localhost:8000/svn/Workspace/Ericsson/ECoupon http://localhost:8000/svn/Workspace/Ericsson/ECoupon_GA/trunk   -"copy directly from ECoupon to ECoupon_GA/trunk"

Committed revision 
31.

可是拷贝的结果有些不如所愿,原因是svn copy时会把顶层目录也一起拷贝,而我们只想拷贝目录下的子目录和文件



如果我们想采用下面的方法,会很遗憾的发现行不通

C:\>svn copy http://localhost:8000/svn/Workspace/Ericsson/ECoupon/trunk/*   http://localhost:8000/svn/Workspace/Ericsson/ECoupon/branches/paul  -"create branch of ECoupon project for user Paul"
svn: Path 
'http://localhost:8000/svn/Workspace/Ericsson/ECoupon/trunk/*' does not exist in revision 31

很不幸,在SVN中不会实现任何的通配符。也就是说在SVN中尼使用通配符是没有用的。那么假如要拷贝的源目录下有很多目录和文件,难道要我们一个个执行svn copy 命令吗?答案是使用操作系统的批处理命令或Shell命令。

下面我们来看如何把trunk目录下的内容拷贝到分支“paul”那里去
C:\>svn copy http://localhost:8000/svn/Workspace/Ericsson/ECoupon_GA/trunk/doc http://localhost:8000/svn/Workspace/Erics
son
/ECoupon_GA/trunk/src http://localhost:8000/svn/Workspace/Ericsson/ECoupon_GA/trunk/WebRoot http://localhost:8000/svn
/Workspace/Ericsson/ECoupon_GA/trunk/read-from-repo.txt http://localhost:8000/svn/Workspace/Ericsson/ECoupon_GA/trunk/re
ad
-from-wc.txt http://localhost:8000/svn/Workspace/Ericsson/ECoupon_GA/branches/paul -"copy resources from trunk to br
anch"

Committed revision 
38.

我们看到“创建分支”居然和普通的拷贝动作一摸一样!是的对SVN来说,主干、分支、标记都是普通的目录而已,这些都是人为加上的意义。


-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
posted on 2009-12-10 17:04 Paul Lin 阅读(316) 评论(0)  编辑  收藏 所属分类: 项目管理

只有注册用户登录后才能发表评论。


网站导航:
 
<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(19)

随笔分类

随笔档案

BlogJava热点博客

好友博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜