2012-01-31 136 views
7

目前我只是有一堆php文件坐在源代碼管理下的文件夾中。從邏輯上講,我有一個相關項目和共享數據庫的集合。PHP項目組織

  • 項目1是一個Web應用程序與數據庫交互。
  • 項目2是一些後臺進程也與同一個數據庫交互。
  • 項目3是一個包含擴展數據庫連接對象和其他實用程序功能的庫。

項目1和2取決於庫代碼。

我想將項目拆分爲三個獨立的存儲庫,以便它們可以獨立開發。

組織前兩個項目的最佳方法是什麼,以便他們依賴於庫,但不需要在其源代碼樹中擁有自己的庫副本?

我應該將庫轉換爲PEAR包並將該包安裝在系統範圍內。 或者更好的是項目1和2在某種意義上是「構建/部署」,並且在構建步驟中包含庫的副本。這種方法意味着使用某種構建管理工具,如Phing/PHP-Maven。

+1

您使用哪種scm軟件?什麼是符號鏈接? – hakre 2012-01-31 12:13:17

回答

3

保留源代碼樹內的代碼副本並不是一件壞事。它允許您控制何時執行升級階段,而不是讓系統將其強制應用於您的應用程序。當你需要釋放你的代碼並且之前發生了一個庫更改時,這是一個非常糟糕的情況,迫使你對必須上線的軟件進行最後一刻的更改。

如果您使用的是Subversion,則可以使用外部函數將庫代碼包含到您的應用程序中,並將其鎖定在某個修訂版本中。更新它只是編輯屬性來更改版本號和更新代碼。

其他版本控制工具可以提供相似的功能。像Symfony2這樣的項目也包含一個腳本來管理依賴關係,但是它們只支持git。

+0

實際上這是一個公平點。現在可能是最好的解決方案。對於我實際使用Mercurial的價值。考慮到不想受制於最新版本的庫。 – freshnewpage 2012-01-31 12:42:26

+0

有一個線程使用這個mercurial。看起來像一個擴展是可用的。 http://stackoverflow.com/questions/217523/can-i-emulate-svnexternals-using-mercurial – 2012-01-31 12:44:50

1

也許是因爲我是maven用戶,我寧願將project3聲明爲project1和project2的依賴項,並使用maven作爲構建管理工具和依賴項解析器(等等)。 @ Louis-Philippe Huberdeau指出的版本問題可以避免使用版本並聲明依賴關係是特定於版本的:也就是說,對於開發項目可以依賴於project3-1.0-SNAPSHOT,對於版本,依賴項將成爲project3-1.0-RELEASE 。這樣三個項目可以獨立演變。 maven可以完成工件的版本控制和部署。稍後,如果您需要它,您可以使用CI服務器,如hudson或Travis CI。

+0

我主要指的是指向一個硬盤上的固定位置。 PHP中有常見的反射人物。 – 2012-01-31 12:36:58

+0

是的,我正在處理C#中的常見反射:P我們在繼承的C#中使用svn externals,但我很想改變它。 – Diego 2012-01-31 12:53:09