2009-05-19 76 views
2

我正在研究一個新項目,我打算保留在一個git存儲庫中。我知道我將如何在CVS中這樣做,但我對git有點新意,並可以使用一些建議。需要一個新項目的git回購佈局建議

該項目是用於兩個嵌入式設備的固件,這兩個嵌入式設備可相互通話並打包成一對。對於這兩種設備,都有代碼的生產變體和製造變體。這兩個設備項目都有許多用於鍛鍊各種硬件(閃爍LED等)或硬件相關位代碼(驅動程序等)的子/同級項目。大部分代碼在所有方面都很常見。

我還有一個要求,能夠彼此獨立地轉換生產和製造固件,以防止通過驗證發送另一個返回。

下面是我現有的目錄佈局。它有機地增長,並且在我知道我會使用git之前基本上已經放棄了。如果有更好的方法去做,我並不反對重組整個事情。

  • ProjectRoot
    • 包括
    • SRC
    • DeviceA
      • 生產
      • 製造
      • 眨眼
      • 按鈕
      • ...
    • DeviceB
      • 生產
      • 製造
      • 眨眼
      • 按鈕
      • ...

我很想在分支機構上進行生產和製造,但我通常在給定的一天都工作,git只允許一個分支機構一次處於活動狀態。然後,我不知道如何處理閃爍,按鈕等,因爲它們不是真正的製造或生產。建議?

澄清:

  • 代碼的製造版本用於在生產線上測試硬件。生產代碼在硬件通過測試站之後加載,併發送給客戶。兩者至少有75%相似,但它們需要獨立,因此我可以修復生產代碼中的錯誤,而不必停止生產線。

  • 由於DeviceA和DeviceB是一對,因此兩個代碼集都使用相同的發行版本號同時進行標記和發佈。

+0

經過大量的研究和實驗,我決定採用子模塊方法。公共代碼位於主存儲庫中作爲子模塊包含的獨立存儲庫中。主要的回購有生產(主),製造和測試分支機構,我保留3個當地克隆進行開發。感謝filmil的建議。 – 2009-05-27 05:12:52

回答

2

我用git來管理硬件/軟件codesigns,所以我可能會給一些有用的建議。作爲一個經驗法則,如果你的設計中的某些部分可以互相操作,而不管你正在修改哪個版本,那麼最好爲這些部分創建單獨的git存儲庫。

舉一個例子,你希望你的驅動程序坐在你的硬件設計的單獨的存儲庫中。這是因爲軟件和硬件之間的接口非常明確,並且是一個自然分解的接縫。此外,相同的驅動程序版本將適用於設備的一系列設計階段。

我不確定你的意思是設計的生產版本。如果你想分離開發和穩定版本,你應該沒有分開的分支。

git中的分支和合並就像你可以得到的那樣便宜,並且分支之間的切換非常快;所以沒有分支罰款。在分支機構之間挑選兼容的變更也相當容易。您通常在軟件世界中看到的方法(發佈的分支,以及一個HEAD)運行良好。

您應該將演示/測試模塊(blinkers等)與它們應該演示/測試的模塊放在一起。這是因爲演示耦合接口經常易於改變。這樣你將不得不保持演示代碼與實際設備同步,這將有助於設計長期穩定。作爲一個方面說明,在FPGA領域中,通常是在大型設備上進行原型設計,然後在受限設備上進行生產。這樣,你的模塊最終有兩個獨立開發的品種。您可能希望將這些變種保存在不同的存儲庫中,因爲它們實際上是不同的實體。在這種情況下,兩者之間共享的代碼(總是有一些可重用的便攜式代碼)可以存儲在單獨的存儲庫中,併成爲一個單獨的存儲庫。特別是如果代碼大小合理。

然後,您可以使用git子模塊將所有提到的模塊綁定在一起。

+0

有沒有辦法讓多個分支同時活動/可見?我服務於多個主人,所以我經常在任務之間彈跳(是的,它聽起來很棒)。它看起來像git要求在切換之前檢查分支的所有更改。 – 2009-05-19 16:39:00

1

我想你可以使用子模塊。 我不是100%確定這是如何工作的,但是你可以爲你的通用代碼(比如LED和用戶界面,或者每個用戶界面)創建一個git倉庫,並且將這個倉庫的副本作爲你倉庫的子模塊對於A,另一個副本作爲B回購的子模塊。

如果要對通用零件進行更改,請在您當前使用的設備上進行更改。完成後,將更改推送到其他產品的子模塊。 如果感覺更舒適,您也可以在其他地方的公共部分進行回購。

總結:將您的可重用代碼放在單獨的回購站中,以便您可以重複使用它。

我不是子模塊之王,但我很快就需要做與你一樣的事情。所以我對如何讓它工作感興趣。