2011-02-09 67 views
2

Similar questions對此有already been asked,雖然他們不完全是我想要做的。使用Git插件開發

起初我以爲我需要一個git子模塊,然後建立一個超級項目,然後一個子樹合併,但我不確定這些是否真的合適。

我有一個project(伊娃),我正在寫一些extensions for it可選。所以如果你想從Github上下載一個副本Eva,它不會包含可選的插件,但你可以單獨獲取它們並使用它們。

可選的擴展名與Eva駐留在相同的目錄結構中。簡單的那麼遠,

Eva 
| 
--- system/ 
--- events/ 
    | 
    --- core_events 
--- tests/ 
    | 
    --- core_tests 

Extension A 
| 
--- events/ 
    | 
    --- [extension A] 
--- tests/ 
    | 
    --- [extension A tests] 

我想測試增加了那些擴展今晚,現在我有他們在我的本地伊娃的git回購之外的單獨的目錄。爲了運行這些測試,我真的需要這些擴展與Eva處於同一個目錄中,這些事件依賴於核心系統來運行。

Eva 
| 
--- system/ 
--- events/ 
    | 
    --- core_events 
    --- [extension A] 
    --- [extension B] 
--- tests/ 
    | 
    --- core_tests 
    --- [extension A tests] 
    --- [extension B tests] 

我可以在伊娃項目文件複製到擴展回購目錄,但如果我修改伊娃的源代碼,然後我要保持整個複製這些變化。

我應該繼續這種笨拙的設置,還是有更優雅的方式git可以容納這個?

也許我的要求是與其他問題相反的。我的擴展是Eva的一個子項目,我需要偶爾從Eva回購中獲取更新。

如果我將擴展repo添加爲子模塊,當有人克隆Eva時,他們也會獲得所有可選插件?我不想那樣。

不確定子樹合併是否適合,我將永遠不必將擴展項目拉入核心Eva項目。

+1

也許這個簡單的答案是讓每組擴展都在自己的分支上?在每個分支`.gitignore`文件中都有相應的條目,它們可以共存在同一個目錄中? – 2011-02-10 00:48:03

回答

3

我認爲你最好的選擇是嘗試改變項目佈局,使每個擴展更獨立,I.E.駐留在它的自己的目錄下,/擴展名。

在框架啓動/ testrun上,掃描該目錄並動態加載擴展。這樣,您不僅可以輕鬆開發和使用git,還可以使各種包裝選項更加簡單,I.E. tar包。它使用戶可以輕鬆查看使用的擴展名。

然後,您還可以允許三方使用他們選擇的VCS輕鬆開發「樹外」擴展。

+0

+1好點,這肯定會減少混淆和潛在的衝突 – 2011-02-21 10:13:53

0

在小工程的根目錄中放置一個簡單的shell腳本,將其稱爲plugin_manager,讓用戶列出已安裝的插件,列出項目服務器上的可用插件,以及下載並安裝新插件?對於最終用戶而言,這可能比爭奪git子模塊更直觀,特別是如果他們不熟悉Git。

下載和運行測試可能只是那當用戶運行$插件管理器下載FOO模塊

對於一個很好的例子,圖案檢查出的文檔The Drush (Drupal shell) commands的腳本執行的步驟之一。

+0

這對我和其他貢獻者來說比用戶更多。對於用戶,我可以將它作爲梨形模塊,以便它們可以通過頻道以及可選的擴展來安裝它。 – 2011-02-10 00:21:23

0

我認爲這可以通過設置git鉤子來實現,以便每次提交(或推送)到核心或擴展倉庫(單獨保存),從而導致更新包含最新版本的發佈測試目錄兩者的副本。缺乏VonC's的知識,但我只能將您重定向到例如the manpageChapter 5 of the git community book

實際上,更簡單的解決方案是使用repos(cp -rs)的軟鏈接副本來設置該發佈測試目錄。不幸的是,在這種情況下,無論何時將新文件添加到repo中,都必須記住添加新的軟鏈接。