2010-03-07 96 views
8

如何處理依賴於獨立框架或庫的非編譯項目的源代碼管理設置?例如,項目A使用框架B.項目A是否也包含來自框架B的代碼在其存儲庫中?有沒有辦法從不同的倉庫自動包含它,或者我需要手動更新它嗎?這種情況通常採取什麼方法?假定我控制了項目A和框架B的存儲庫,並且兩者的源代碼都未編譯。源代碼管理相關性的最佳實踐

任何資源或建議將不勝感激。我目前正在使用Subversion(在一個非常基礎的層面上),但我想切換到Mercurial,以便我可以用Fogbugz來試用Kiln。

編輯:在Mercurial中,你會使用這個函數的父庫嗎?

+0

這似乎是一個近乎完美的重複問題,只是昨天問:http://stackoverflow.com/questions/2392404/dvcs-how-structure-with-large-integrated-code-base-with-multiple-projects-sharin – 2010-03-08 00:07:37

回答

2

如果您想使用Subversion並需要包含來自其他存儲庫的代碼,則Subversion Externals可能是一個選項。

但是,如果您正在處理可編譯的代碼,那麼建立一個只需獲取所需二進制文件的構建過程可能會更好。像Maven這樣的構建工具可以幫助你。

+0

或常春藤(http://ant.apache.org/ivy/)Apache依賴管理器。但是Maven和Ivy都可能只適用於Java項目。我不知道有人曾經在C/C++環境中使用過它們。(?) – 2010-03-09 14:13:51

+0

我們專門爲此使用了外部。代碼取決於模塊的修訂版本X.當代碼檢出時,外部將該修訂拉入樹中。使依賴顯而易見。 – 2010-04-02 13:32:14

1

大部分時間我都試圖包含在Subversion中構建項目所需的一切。這是使用C#和Visual Studio,所以我的大部分依賴是dll。在其他環境中,約定可能會有所不同。

這通常是我如何佈置一個新項目:

  • 裁判
    • SomeOpenSourceProject.dll
    • SomePurchasedComponent.dll
  • MyProjectA
    • MyProjectA。 CSPRO Ĵ(引用.. \ REF \ SomeOpenSourceProject.dll)
  • MyProjectB
  • MyWeb即可(引用.. \ REF \ SomePurchasedComponent.dll)
  • MyApplication.sln

這樣一來,它可以被一個新的開發者檢查出來並且沒有太多麻煩。過去他們曾經爲dll使用網絡共享,但是由於不同的項目使用了不同的版本,所以很煩人,如果你想回到顛覆或分支或其他任何東西,很難跟蹤。這個結構很好地解決了這些問題。

0

如果B是一個開源項目,並且您想用A編譯它,我建議您嘗試vendor drop技術。這樣你可以保留你自己的補丁。

如果B是您公司的專有代碼,並且您不想編譯它,那麼只需將編譯的二進制文件複製到A'repo中就可以了。

1

我做的非常相似,大衛·霍格的東西,但它看起來像這樣:

- lib (anything used IN the software) 
    - purchased_component.dll 
    - internal_library.dll 
    - icon_set 
     - icon1.ico... 
- tools (anything used to BUILD the software) 
    - nunit.framework.dll 
    - settings.stylecop 
    - settings.fxcop 
- src (the software itself) 
    - myapp.sln 

大部分的靈感,對於這種設置,從tree surgeon出來(相當過時現在雖然)

+0

我也使用過這種方法。我喜歡將依賴關係分解爲發佈版(lib)附帶的那些東西,而不是開發人員構建/文本/分析解決方案(工具)所需的東西。 .NET書中優秀的Brownfield應用程序開發推薦了相同的方法。 – dthrasher 2011-10-07 15:45:16