2012-07-28 71 views
2

假設我想爲Twitter的(神奇的開源)iPhone應用程序添加一組相關但獨立的功能。在應用程序中,您可以點擊「家庭自動化」,並在屏幕上顯示一系列按鈕,用於控制家中的功能:燈光;電視;溫度;燈罩;和音樂。該產品開發的理想git分支策略是什麼?

在開發這套功能的Git中,理想的分支模型是什麼?

下面是一些假設:

  • 一個人(同一人),將開發的全部功能。
  • Twitter鼓勵重新定義它的整合模式。
  • 所有功能都共享一些基本代碼。

這裏是我的可有可無富人的模式,雖然我很想聽到所有的模型選項:

  • 應該是容易的代碼審查人員審查每在最後獨立的功能。換句話說,審覈Lights代碼的人不應該處理在實施電視時做出的任何改變。

  • 每個功能在開發過程中都應該有很好的,清晰的歷史記錄。在使用Lights時查看foo.m時,我應該只看到爲實現Lights而進行的更改,而不是爲實現電視而進行的更改。

  • 即使我把電視機置於雜亂/破碎的狀態,我仍然可以編譯和測試燈光。該模型

一個要求是,我需要能夠生成測試基礎上具有的所有功能集成在一個定期,就像他們會呈現給用戶。換句話說,當我運行我的測試版本時,我看到包含每個功能的家庭自動化屏幕。這裏

我最初的反應是建立這樣的分支:

Twitter 
    \ 
    Automation 
     \ 
     Lights 
     \ 
     Television 
     \ 
     Temperature 
     \ 
     ... 

換句話說,我會從Twitter分支打造的「自動化」的分支,它包含了共享代碼,所有的家庭自動化功能的使用,包括用於訪問功能的概述UI的存根代碼(即上面提到的「屏幕按鈕」)。然後我會創建一系列來自Automation的分支,每個分支都有一個分支。

但是,在這個模型中,我很難理解我將如何在這個世界中生成完全集成的測試版本。我想我需要創建一些其他的分支機構,這些分支機構會定期合併燈光/電視/分支機構。但是在這次合併中會有明顯的衝突。

例如,假設Automation分支中的共享UI代碼有一個函數num_buttons_to_render,該函數返回在Home Automation UI中呈現的按鈕數量。自動化分支將在這裏返回0,因爲它本身沒有實現任何特性。每個兒童分支(燈光,電視等)都會返回1,因爲他們只實現了各自的工作流程,不關心其他功能。但測試分支想要在這裏返回5,因爲它想渲染所有5個自動化功能(燈光,電視,溫度,陰影和音樂)。所以我想要在測試分支中解決衝突,然後繼續整合所有功能分支隨後的更改。但是我還不清楚我能做到這一點,因爲所有功能部門都使用Twitter開發標準規定的rebase模型。

我是新來的混帳,所以我希望我在這裏有所瞭解。如果沒有,我會在這裏主動回答任何後續問題。非常感謝你的幫助!

回答

0

我想我需要創建一些其他分支,定期合併燈光/電視/等分支。

這聽起來似乎是合理的。

但是在這個合併中會有明顯的衝突。

所以處理它們。最好早點做,而不要晚點。

但是測試分支想在這裏返回5,因爲它想渲染所有5個自動化功能(燈光,電視,溫度,陰影和音樂)。所以我想要在測試分支中解決衝突,然後繼續整合所有功能分支隨後的更改。

爲什麼這應該是衝突?

爲什麼不讓每個功能調用一個函數來註冊自身,這會增加功能的數量。如果沒有功能調用該功能,則計數爲零。如果有人叫它,計數是一個。如果五個人稱呼它,計數是五。這似乎比在某個地方有一個硬編碼的計數器更好,它在不同分支中具有不同的值。

我沒有看到你建議的分支模型有任何問題,你所描述的唯一問題與git無關,可以通過改進代碼設計來解決。

但我不明白我可以這麼做,因爲所有功能分支都使用Twitter開發標準規定的rebase模型。

也許我錯過了一些東西,但我不明白爲什麼這是一個問題。如果您定期將自動化與上游代碼重新綁定,然後將自動化中的每個功能分支(而不是上游)重新綁定,則從功能分支到自動化分支的合併將沒有問題。

+0

謝謝喬納森。關於代碼設計的問題:我可以做你描述的註冊模型,但改變我的架構以適應我的開發工作流程似乎很奇怪。如果我正在構建一個其他人可以插入的可擴展/動態系統,這樣的註冊系統似乎對我更有意義,但我不是。最終有固定數量的功能。換句話說:如果我在一個分支上設計這一切,我是否會使用這個註冊系統使架構複雜化?可能不會吧? – Aaron 2012-07-28 23:05:07

+0

回覆:「我不清楚我是否可以這樣做,因爲他們正在使用rebase模型」 - 我沒有按照你的回答。你說你看到沒有問題從功能分支合併回自動化,但這不是我所指的。相反,我指的是擁有一些將所有功能分支合併在一起的發佈/測試分支。如果我的功能分支自動化(從上游重新分配),那麼每次我想要生成一個發佈版本時,是不是必須將所有功能分支重定向到我的發佈分支中,這意味着不斷重新解決相同的衝突? – Aaron 2012-07-28 23:09:13

+0

(很明顯,我同意從功能分支到自動化沒有任何問題,但我只想在完成特定功能時完成該功能。在此期間,我希望成爲能夠生成集成了所有功能的發佈/測試版本,我假設這些功能將發生在不同的分支上。) – Aaron 2012-07-28 23:11:18