2016-08-23 59 views
0

我想找到管理和版本我們的共享文件的最佳方式。現在我們在TortoiseHG中使用mercurial,這對於一個項目中的所有文件版本都是好的,但是我們想要與主存儲庫分開處理一些文件。如何管理共享文件

我們使用codeigniter,我們有一些模型,庫和視圖文件,我們想要在我們的項目之間共享這些文件,並將這些文件從當前項目中分離出來,與其他存儲庫(或者其他方式,例如使用包管理器 - 不要沒有什麼可能是最好的)。

換句話說,我們有項目A和項目B(我們有比兩個更多的項目,這只是例如)。當我們從項目B的所有者那裏獲得功能請求(這是一個普通功能(更好的登錄系統))時,我們準備了必要的更改,並且我們希望將此修改上載到所有其他項目。現在我們在當前正在進行的項目中創建這些修改。如果我們使用自己的共享文件庫創建另一個第三個項目,可能很難開發,因爲這些文件不能單獨工作,所以需要其他視圖以及控制器文件來加載和測試它們。

結構:

root/ 
    application/ 
    model/ 
     auth.php 
     other1.php 
     other2.php 
    library/ 
     mail.php 
     other1.php 

所以我們想從我們的任何項目分別auth.php和mail.php版本,比other.php-S並上傳到其他地方,檢查是否有任何更新在這些分離的共享文件存儲庫中,如果存在,則在自己的項目中更新這些文件。

我到目前爲止所嘗試的:我在mercurial中創建了一個subrepository,但正如我所看到的,只有當我們將我們的共享文件放在單獨的文件夾中,這不是我們想要的。

隨着subrepository我們得到了這些結構:

root/ 
    .hg/ 
    ... 
    application/ 
    model/ 
     auth.php 
     other1.php 
     other2.php 
    library/ 
     mail.php 
     other1.php 
    subrepo-files/ 
    application/ 
     model/ 
     auth.php 
    library/ 
     mail.php 

我希望你明白我在說什麼,因爲它是越來越難以治療。現在我們所做的是,我們手動將這些共享文件複製到所有其他項目,當其中一個更新時。是的,這太可怕了!有時候有人會忘記將共享文件的更新版本複製到其他項目中,當我們在共享文件上的其他項目中創建其他更改時,並將它們複製回其他項目時,我們會丟失以前的更新(這是使用自己的項目進行版本控制,但我們只注意到太晚了,我們必須手動調試它們)。

我花了幾天的時間找到最好的方法,但我沒有找到我們想要的東西。

回答

0

我想我明白了。我過去做過的這樣的事情是使用Composerprivate Composer repositories。使用Composer,您可以將共享代碼打包爲「模塊」(或任何您喜歡稱之爲的模塊)。

例如,我們有一個我們自己使用的DB模塊和配置模塊。對於那些我可以獨立管理和更新數據庫或配置模塊,然後將它們包含在任何需要它們的項目中。

真的很酷的部分是你可以version你的作曲家模塊。這意味着每個加載該模塊的應用程序只會引入特定版本的應用程序。如果您更新模塊,其他應用程序仍在使用以前的版本,並且不會全部中斷。

我知道這並不能解決你怎麼開發和測試模塊的說法,但有一些選擇。

Composer會將模塊加載到當前應用程序中的vendor/目錄中。一旦加載到您的應用程序中,您可以使用符號鏈接替換Composer加載的模塊代碼到模塊的分離項目文件,也可以在vendor目錄中修改它們,然後將更改推送到Mercurial。

你也可以爲你的MVC應用程序創建一個簡化版測試/模擬版本,並在那裏自動進行測試。

+0

在這種情況下,我們應該對我們的/ ci文件/文件夾結構進行重新排序,這不是我們能做的。不幸:( – Twois