【18】創(chuàng)建分支
在企業(yè)級產品的開發(fā)過程中,除了通用產品之外,有時會存在一些需要根據客戶實際情況進行“定制化”的情況。假設現(xiàn)在我們產品的代碼存放在/.../trunk目錄下,客戶需要的定制化需要修改源代碼,而且未來的時間還會有不斷的需求提出。
此時就給我們帶來了一個問題了:假如我們?yōu)榱送瓿煽蛻舻亩ㄖ苹螅苯釉?trunk下修改源代碼然后提交。那么會直接影響到其他通用產品。所以我們本能的想法就是:再創(chuàng)建一個源代碼的拷貝,然后對這個拷貝進行獨立修改。以一個獨立項目的形式進行版本控制。
這樣的想法很好,但是又帶來了一個潛在的問題:假如現(xiàn)在發(fā)現(xiàn)在/trunk目錄的源代碼存在重大bug,需要馬上修正并更新到所有的分組去這樣的工作怎么做?
和其他版本控制工具一樣,SVN也提供了分支的概念。“分支”實質上也是一個普通的版本庫中的目錄。不同的是它是從其他主干或分支復制而來,它和主干或其他分支“共享”了一段相同的版本歷史,然后在它被創(chuàng)建之時起又有了它獨立的版本歷史。
現(xiàn)在我們來模擬“分支”創(chuàng)建的過程和應用。假設經過一段時間開發(fā)和測試之后,ECoupon項目已經成熟。此時項目負責人決定在版本庫上開放一個ECoupon_GA目錄,在這個目錄下包含了三個子目錄:





現(xiàn)在我們需要做的事情包括:
A.把ECoupon項目的代碼Import到ECoupon_GA項目下
B.為ECoupon_GA項目創(chuàng)建一個分支,位置在/branches/paul下
關于第一個問題很好解決,有兩種方式:
A.從本地的E:\Temp\ECoupon項目下導出代碼,再導入到ECoupon_GA/trunk目錄下
B.從版本庫的ECoupon下拷貝到ECoupon_GA/trunk目錄下
下面我們來試一下使用svn copy命令來直接從版本庫拷貝的做法。還記得我們在前面提到的svn copy URL URL的用法嗎?



可是拷貝的結果有些不如所愿,原因是svn copy時會把頂層目錄也一起拷貝,而我們只想拷貝目錄下的子目錄和文件
如果我們想采用下面的方法,會很遺憾的發(fā)現(xiàn)行不通


很不幸,在SVN中不會實現(xiàn)任何的通配符。也就是說在SVN中尼使用通配符是沒有用的。那么假如要拷貝的源目錄下有很多目錄和文件,難道要我們一個個執(zhí)行svn copy 命令嗎?答案是使用操作系統(tǒng)的批處理命令或Shell命令。
下面我們來看如何把trunk目錄下的內容拷貝到分支“paul”那里去







我們看到“創(chuàng)建分支”居然和普通的拷貝動作一摸一樣!是的對SVN來說,主干、分支、標記都是普通的目錄而已,這些都是人為加上的意義。
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。