2010-09-16 108 views
10

所以我有一些私有的git倉庫,它們是算法的不同語言實現(Python,Java等)。每個實現在功能上都是相同的,執行相同的步驟並給出相同的輸出。目前,這些是分開的回購協議,但我想知道如果我不應該他們統一爲一個回購協議,以目錄顯示的語言,如:git用於多語言實現的最佳做法是什麼?

master 
    - java 
    - python 
    - ruby 

我可以用一個git回購相結合的命令來保存歷史,所以這不是問題。我只是好奇這方面的最佳做法。

回答

5

我和Mercurial有同樣的問題,我想在CPython中實現一個算法(COBS)。

最終我決定將它分成獨立的存儲庫(儘管Python實現包含一個C擴展,它具有類似於普通C實現的代碼)。我的推理歸結爲:

  • 我想獨立版本的編號的實現,並獨立發佈。
    • git describe是一個很好的功能,以識別基於最新註釋標籤的版本。只有一個在版本庫中的實現,git describe的使用很簡單。但是如果在一個存儲庫中使用不同版本號的不同實現,則git describe的使用變得更加複雜,需要使用--match選項來限制具有給定前綴的標記。例如git describe --match "python*"
  • 方式Python模塊通常被組織(Python module packaging best-practices),這讓我更有意義,以保持Python實現獨立和自足。
  • 其他都相同,我傾向於更多的細粒度模塊化。
+0

我聽說過關於git回購的細粒度模塊化,它是有道理的。我將很快將我的私人回購協議推送到github,所以我想要遵循最佳實踐(如果存在的話)。 – argoneus 2010-09-16 14:32:22

2

這是一個棘手的電話。可能什麼是「最佳」將歸結爲個人偏好和/或具體情況。

一方面,每個目錄在技術上與其他任何「相關」。雖然他們確實實現了相同的算法,但沒有一個依賴於其他任何人(因此從純粹的源代碼角度來看,它們是無關的)。通常,不相關的東西最好留在單獨的回購中(Craig McQueen的回答中指出了原因)。

但是,因爲他們實現相同的算法,您可能會發現,如果您需要更改算法,您需要對所有目錄做出非常類似的更改。在這種情況下,可能有意義,將所有更改作爲單個提交進行。假設您決定算法需要支持「虛擬dinglehoppers」。您可以將該支持添加到每個目錄,並進行單個提交,其消息是「添加對虛擬dinglehoppers的支持」。這很好,因爲如果你以後決定添加虛擬dinglehopper支持是不好的,那麼現在可以只恢復一次提交。另一種方法是對三個獨立的存儲庫進行三次單獨的提交,然後從三個單獨的存儲庫中還原三次單獨的提交。

再一次,這是一個艱難的電話。我不認爲有一條明確的,嚴格的規則可以通過。

+0

感謝您的意見,Dan。你提出了一些很好的觀點,特別是關於在所有語言實現中改變算法的相同方面的觀點。我同意 - 這是一個艱難的呼籲,並且從我所收集的信息來看,沒有一個明確的最佳實踐。 – argoneus 2010-09-16 14:33:39

相關問題