2008-10-07 110 views
7

我們的開發使用了大量的開源代碼,並試圖找出管理這些外部依賴關係的最佳方法。如何管理不斷被修改的外部依賴關係

我們目前的配置:

  • 我們爲Linux和Windows
  • 我們使用SVN爲我們自己的代碼
  • 外部依賴(升壓,log4cpp,等)不存儲在SVN發展。相反,我將它們放在./extern(或windows上的c:\ extern)下。我不想將它們放在我們的存儲庫中,因爲我無法以這種方式更新它們。其中一些不斷更新。

我的問題

  • ,如果我需要修改外部代碼怎麼辦? 目前我在我的svn倉庫中創建了一個名爲extern_hacks的文件夾,這是我放置修改的外部代碼的位置。然後,我將這些文件鏈接(或在Windows上覆制)到外部目錄結構中。這個解決方案是有問題的,因爲很難跟蹤複製文件,並且當文件位於兩個存儲庫(我的修改文件和原始存儲庫說sourceforge)時很難從svn更新。

  • 如何管理外部依賴的版本?

我很感興趣地聽到別人如何處理這些問題。謝謝。

+0

爲什麼你不能更新他們,如果他們在回購?這是沒有意義的。請解釋。 – Mecki 2008-10-07 16:40:25

回答

6

我讓他們在SVN,並管理爲vendor branches。保持它們外部鬆散使得很難回到以前的版本,或修復以前的版本中的錯誤(特別是如果錯誤來自於對外部依賴性的改變)

保持它們在svn中爲我節省了很多頭痛,並且還可以讓你獲得一個能夠快速處理你的代碼庫的新工作站。

+0

我知道我有點晚了,但作爲對這個答案的評論,我想提一下簡單的規則:應該保持構建(源代碼,構建腳本)和部署(映像,資源文件)過程所需的所有內容在你的scm。 – JohannesH 2010-02-02 21:36:27

2

我不明白你爲什麼說

我不想把它們放在我們的倉庫,因爲我不能夠更新他們的方式。其中一些不斷更新。

你真的需要

  1. 包括在你的源代碼控制的外部依賴,並定期更新它們,然後TESE,測試,再測試。

  2. 協調您的構建過程和外部依賴關係的更新。

如果你的代碼依賴於一些東西,那麼你真的需要了,當它被更新/修改爲具有控制權。在任何時候對這些依賴關係進行更新的空間進行編碼太痛苦,因爲您無疑會發現。我個人比較喜歡的選項1.

+0

我同意沒有必要爲此維護一個單獨的存儲庫。如果需要分離,請使用分支。 – JohannesH 2010-02-02 21:39:19

0

你有沒有考慮Maven?這是一個構建系統,對管理依賴關係具有出色的支持。對於每個項目,您都可以在xml文件中指定所需的依賴項作爲該項目的一部分。外部庫被保存在一個依賴庫(在我們的例子中爲Artifactory),這與版本控制系統是分開的,可以只是一個網絡驅動器。它還允許管理不同版本的項目。

1

當我不得不這樣做時,我將外部源添加爲外部源,然後對其應用修補程序。該補丁包含我對外部源的修改。所以,我其實只是版本控制我的補丁。大多數情況下,如果外部代碼沒有「戲劇性」的變化,這種情況就會起作用。

0

我會小心考慮Maven的,因爲:

  • 它是在你已經與您當前的版本控制系統的資料庫系統另一個倉庫;
  • 它(Maven)是基於每個開發人員唯一的「通用版本控制」,文件系統(這意味着沒有元數據或屬性附加到該文件,誰沒有適當的歷史修改什麼和什麼時候)

現在與第三方打交道時,你可以考慮讓它們在你的版本控制系統,但在包裝方式:這是一個非常緊湊的方式,來源及文件壓縮,以儘可能少的文件數量

這樣的話,你會管理這些(多)的第三方庫的部署因爲文件的數量來部署低容易。

另外,讓它們在源代碼控制下可以讓你創建一個分支(比如'hack'分支),在這個分支中你將存儲被黑客入侵的庫的打包(或壓縮)版本。

您可以在外部方式存儲什麼是未壓縮的,完整的代表這些庫文件,因爲沒有對他們沒有真正的發展,或者只是一個守黑客:通常情況下,你的工作是不發展現有庫,但要使用它們(即使有點修改),以便更快地實現項目的某些功能。

如果您需要在某些時候將某些被黑客入侵的版本與某些官方版本進行比較,您只需從svn中拔出相應的「被黑」版本號,將其與官方(和外部存儲的)進行比較,版本(例如winmerge)