2013-05-07 102 views
3

我正在重新構建現有代碼庫。我們正在轉向SVN並期待軟件活動的增加,我需要一個可擴展和強大的結構。SVN:跨項目共享公用庫/代碼

我希望我們的要求與其他公司的要求不太相似,所以我會從你們那裏得到一些反饋。

問題

我有一些項目:庫和應用程序。應用程序依賴於庫,而且一些庫依賴於對方。

我們有很多產品。每個產品都是包含一些庫和一些應用程序的MSI。

這些項目是C++,它們之間的依賴關係是頭文件和導入庫/ DLL--我們目前正在Windows下開發,但最終將移植到MACOS和Linux。

儘管每個項目都是其中一些項目的獨立實體,但我們最終同時更新了其中的幾項。例如,在處理app_0時,我們可能會更改lib_a中的某些代碼(可能是錯誤修復,添加的功能等)。 但是我們不想強迫開發人員總是檢查項目依賴關係的來源。

潛在的解決方案

每一個項目是在SVN自己的目錄,並有一個「dependencies.txt」文件中列出的頭,和的.libs .DLL文件它需要以及這些應該在磁盤上創建。一旦檢出項目,腳本會自動分析此文件以檢索依賴項。頭文件從SVN中檢索(部分檢出),而二進制文件則從服務器中獲取。

項目遵循通常的幹線/標籤/分支結構。

在磁盤上,每個項目都位於其自己的目錄中,處於扁平結構中。輸出目錄包含二進制文件,這可以通過構建項目或作爲處理'dependencies.txt'文件的結果從服務器複製而生成。

  • 輸出
    • win32_debug
      • lib_a.lib
      • lib_a.dll
  • lib_a
    • 公共
      • lib_a.h
      • other.h
  • PROJECT_1
    • 依賴。TXT
    • 構建
    • 來源
      • project_1.cpp

這種結構意味着我們可以在PROJECT_1工作,而無需檢出來源lib_a。但是我們仍然可以將庫檢出到'./lib_a'中,並且不用修改project_1就可以使用它的源文件,因爲頭文件和導入庫的位置保持不變。

「安裝程序」項目用於發佈軟件。該項目將簽出發佈所需的所有項目並構建它們。

在發佈期間,爲所有項目創建「發佈」分支。所有應該進入發行版的變化都將付諸實施。這樣我們只需要在結帳(跟蹤發佈分支)上運行更新以獲取最新的更改。

+0

你有問題要問? – 2013-05-07 11:24:21

+0

尋求有關如何解決所陳述的問題和/或對我提出的解決方案的意見的建議。 – JPh 2013-05-07 13:55:26

+0

@JPh - 你最終做了什麼? – DemiSheep 2014-06-09 18:26:51

回答

2

有處理相關性問題的幾種方法:

  • 使用版本庫和對待你的頭文件作爲發佈的軟件。您可以使用wget來提取正確版本的庫和頭文件。優點是你沒有在你的Subversion版本庫中檢查大塊的二進制代碼。 Subversion不會處理二進制文件,但是它們佔用了存儲庫中的大量空間。您可以使用svn:externals屬性。這允許您自動將另一個存儲庫目錄包含在另一個目錄中。但是,要非常非常小心!

想象一下,你有以下幾種:

trunk/project_A 
trunk/project_B 
trunk/subproject 

您想要在project_Atrunk/subproject,並設置上project_A以下屬性:

$ svn propset svn:externals "/trunk/subproject subproject" . 

當你分支project_A,你子項目仍然在主幹上。不是你想要的。如果您標記project_A,那麼該標記不會是快照,因爲subproject仍然指向中繼線。有幾種處理方法:

  • 使用相對目錄。那就是,svn propset "svn:externals ../subproject" subproject .。這將確保您在分支project_A時,它將查看您的子項目的分支而不是中繼。當您標記project_A。標籤將指向子項目的相同標籤。問題是你必須用project_A分支和標記你的子項目。

  • 使用特定版本。您可以使用-r參數將特定版本的子項目修復爲project_A,或者您可以簡單地使用標記。無論如何,您已經及時凍結了子項目。 Word o'警告:如果有人簽出project_A,他們可以修改子項目,即使它位於標籤目錄中。您將需要某種預先提交鉤子來防止某人更改標籤。

+0

與評論搞亂的道歉 - 沒有意識到迫切要求貼出來! (1)發佈回購聽起來不錯。 (2)外部聲音的相對網址聽起來很有趣,將會進行調查。不知道如何處理引用與lib相同的lib的多個項目將被多次檢出... – JPh 2013-05-07 14:03:15

+0

看看[External Definitions](http:// svnbook)上在線Subversion手冊中的章節。 red-bean.com/en/1.7/svn.advanced.externals.html) – 2013-05-07 14:32:09