2012-02-12 49 views
4

的文件在「Version Control with Subversion」的Vendor Branches section建立一個供應商分行「的libcomplex」,然後使用下面的命令來的libcomplex複製到主要開發分支:顛覆:只使用一些從供應商分支

$ svn copy http://svn.example.com/repos/vendor/libcomplex/1.0 \ 
      http://svn.example.com/repos/calc/libcomplex  \ 
      -m "bringing libcomplex-1.0 into the main branch" 

但是,如果我們只需要libcomplex的一部分功能(因此也是文件的子集)呢?

將libcomplex的一部分複製到主分支中可以嗎?或者這可能會導致問題(特別是在升級libcomplex時)?

+1

除了你只是不想讓你的樹上的文件有什麼其他原因嗎?櫻桃採摘文件的安裝或發佈包是一個不同的野獸。 – Manwe 2012-02-19 17:21:16

回答

1

也許解決這個問題的最簡單的方法是隻將你需要的文件提交到你的倉庫中。這使得顛覆方面的問題變得微不足道。如果您可以編寫一個腳本從您從供應商處獲得的下拉列表中提取需要的庫子集,那麼整個過程可以自動化。如果提取必須手動完成,這仍然是可行的,但它更煩人一點。無論哪種方式,它很可能會變成維護頭痛。第三方庫通常不會被分割,所以當庫進行任何結構性更改時,您都有可能需要手動進行更改。

完全不同的方法是將庫(或其子集)編譯爲二進制文件,然後僅將該二進制文件提交到源代碼樹中。這就是我在一個我所從事的項目上所做的。我們爲供應商的庫提供單獨的存儲庫。一個自定義的生成文件將生成svn://vendor_repo/trunk並生成svn://vendor_repo/trunk/libs(這是與每一個新的下降一起提交),這是我們使用svn:externals拉入我們的主要存儲庫的這個libs子文件夾。使用這種方法,我們的代碼不知道(或關心)這些庫是一個子集還是整個庫。他們看到的只是一個鏈接的二進制文件。我們必須手動維護的代碼的範圍是我們用來構建供應商庫的自定義生成文件。

3

我不會推薦分割從其他來源導入的庫。

如果libcomplex任何東西,但很平凡,你將會依賴合併+升級夢魘。

0

您使用sparse directories

它更適合目前提取目錄而不是單個文件,但假設這是正常的,請使用--depth選項來限制檢出的內容量。

+1

OP在分支之間的存儲庫中進行復制,而不是結帳。 – madth3 2012-02-22 16:30:23