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 閱讀(410) 評論(0)  編輯  收藏 所屬分類: 項目管理
          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 扶余县| 平潭县| 肇州县| 铜陵市| 南昌县| 基隆市| 庆阳市| 开鲁县| 镇远县| 玉林市| 吴忠市| 谢通门县| 屯留县| 深州市| 博客| 岑巩县| 阳朔县| 泗水县| 贵阳市| 临颍县| 武鸣县| 齐河县| 孝义市| 合水县| 江陵县| 陵水| 常宁市| 凌源市| 益阳市| 通化市| 文昌市| 沙田区| 连云港市| 太白县| 英超| 西丰县| 瑞安市| 南郑县| 滦南县| 台州市| 阜南县|