2010-11-16 36 views
1

客戶端具有基於相同代碼的不同版本,基本上它們複製模板代碼庫,然後編輯副本,然後在生產中使用該副本作爲代碼的實例。這意味着有20個版本的代碼庫正在運行,但是80%的代碼是相同的。在不改變工作流程的情況下,如果代碼在每個構建/分支的VCS中發生更改,則可以合併源代碼,然後再構建代碼。如果有問題,則代碼在Perl中。Git,SVN等做這種類型的「分支和合並」或類似的東西嗎?

如果是這樣,這是什麼叫做,VCS管理「構建」(它是Perl,真的只是代碼版本)。

可視: A,B,C自定義代碼分支; X是共享的代碼

| 
    | 
    X 
    | 
    /|\ 
/| \ 
A B C 
\ |/
    \|/ 
    | 
    | 
    X 
    | 
    | 
    |\ 
    | \ 
A,B C 
    |/
    |/ 
    | 
    | 
    X 
    | 
    |  
    /| 
/| 
A B,C 
\ | 
    \| 
    | 
    | 
    Etc... Where X = 80% of the code. 
    | 
    |  
+1

我認爲這是所謂的分支合併? – Lukman 2010-11-16 02:05:25

+0

@Lukman:+1謝謝,更新了問題。 – blunders 2010-11-16 02:08:24

回答

3

是的,你可以,但在我解釋之前,我必須強烈建議你不要這樣做。把共享的東西和共享的東西分開,並將共享的東西變成某種框架好得多,這可以像將可變的東西移動到「網站」目錄一樣簡單(我猜你正在構建罐頭網站)有20個子目錄,框架在運行時選擇(增加到模塊路徑)(use lib "sites/$site";可能會訣竅,但不要引用我的話)。

如果您確實需要通過版本控制來管理這個功能,您可以簡單地爲每個站點創建一個分支,維護基於主站的核心代碼,並定期從主站點合併到每個站點以傳播更新。如果變量和共享代碼完全分離,這很少需要人工干預。

2

我想這可能是與樹枝做的,但我覺得這是比較理想的,只是有一個知道如何加載模板的正確版本更明智的模板系統。如果你堅持使用分支機構,你可以通過擁有一個擁有所有通用代碼的主分支(使用Git的說法)以及每個變體的分支來實現。對特定版本的更改可以在相關分支上完成,而應該影響所有內容的更改可以在主分支上完成。但是,除非您爲它創建了某種自動化功能,否則必須將最新的主修改合併到每個分支中。再次,我不認爲使用分支來做這樣的事情是最好的想法,但你可能能夠使它工作。

+0

+1謝謝,RE:**「我認爲只有知道如何加載正確版本的模板的智能模板系統會更理想。」**這將是一個例子嗎? **「我不認爲使用分支來做這樣的事情是最好的想法」**同意,只要確保。 – blunders 2010-11-16 02:24:18

+0

@blunders - Marcelo給出了幾乎相同的答案,稍微更具體地描述了「更聰明」可能是什麼。您只需要一種將通用代碼與實例特定代碼分開的方法。無論腳本是否提供,都需要檢查它正在運行的實例並加載相應的模板。 – 2010-11-16 02:28:31

0

在Git中,您可以擁有一個Git倉庫的多個完整克隆,其中每個倉庫都有自己的完整倉庫。

  • 建立一個叫做客戶端新的分支/自定義
  • 做客戶端的變化,並將其提交到客戶端/定製
  • 請在「原產地」回購的變化。
  • 提交原始回購變更。
  • 拉離原點/主人變成客戶端/主
  • 客戶衍合/自定義,以最新的客戶端/主合併來自客戶端/主的最新變化到客戶端/自定義。

這可能不是做在Git中最快的方式,但它可以工作(假設你手動解決任何靠不住的合併,當然)。

http://git-scm.com/docs/git-rebase

相關問題