2015-09-24 155 views
1

我是自由職業者,爲我的客戶編寫代碼。我有我自己的代碼庫(我在項目中重用的代碼),這是我在整個時代開發的。我使用git進行代碼版本控制。Git - 子模塊項目

我自己的代碼庫由幾個Git倉庫(.NET庫,C++庫等)

當我安裝一個客戶我爲它創建新的Git倉庫,並從我的庫中添加一個新的項目我代碼庫作爲項目庫的git子模塊。

它適用於我,但是當我必須與客戶分享我的代碼時出現問題。我只想簡單地將他的項目的git存儲庫發送給他,但我不想與他分享我的整個代碼庫(例如,所有我的.NET庫,這些庫都作爲git子模塊包含在項目存儲庫中)。只有在項目中真正使用的代碼應該共享。

我可以考慮將我的代碼庫分成更小的部分(不是一個包含我所有.NET庫的git存儲庫,將它分成更小的塊)。不過,我不確定這是否是一個真正的解決方案。要做到這一點

+0

我不認爲你的問題與Git有很大關係。實際上,您可能正在使用任何其他版本控制系統,並且仍然存在相同的問題:如何跨項目_共享通用代碼。你有沒有考慮將你的庫打包爲NuGet包,並將它們作爲二進制文件分發? –

+0

我認爲,但主要是我的客戶需要源代碼,即使是來自我的代碼庫的文件。當然,我不想爲他提供我的整個代碼庫,只有項目真正使用的文件。這是我想解決的問題。 –

回答

1

一種方式將是(從項目創建開始):

  1. 克隆的原始的代碼庫並將其設置爲上游。
  2. 在克隆回購中創建一個新分支。刪除本地'master'分支。即子模塊的主要部分。
  3. 截斷新分支中當前項目的所有冗餘項。您必須事先計劃存儲庫結構,以避免繁瑣且繁瑣的選擇所需的庫/模塊。 How to clean up git commit history.How to cherry-pick added modules/libs from the child repo to main
  4. 工作。
  5. 發送代碼給客戶。客戶的上游項目應該是您所從事的工作,而不是主要的子模塊。
  6. 當一切完成時 - 將主分支轉移到克隆(子)回購和挑選應添加到您的代碼庫中的東西,甚至更好 - 在批處理中將它們併入主子模塊回購。
  7. 當維護/支持/生命週期完成時,刪除/歸檔孫級回購(您的客戶)的支持(上游)。

不知道是否有更直接的方法來實現這一目標,但是如果有任何方法可以爲分支設置獲取權限 - 那將是完美的。

另一個更好的方式來設置你的WOW將使用gerrit。它支持setup access的特定分支機構,並允許一個良好的整合過程。僅比GIT好得多。

+0

分支似乎能夠幫助解決這個問題。我有一些筆記/問題:第3點)如何執行截斷操作,以便我的客戶在向我提供項目後,將無法通過提交歷史記錄訪​​問我的整個代碼庫?要點6)將原始代碼庫合併回項目的代碼庫意味着在我的項目的下一次迭代中,我將再次在將項目發送給我的客戶之前需要截斷不需要的文件。 7)什麼是孫回購? –

+0

@MartinDusek我編輯了答案,查看更新。至於第6點 - 您在發送給客戶時不需要移除子回購。那麼除非你沒有把所有這些存儲在哪裏。請記住,您可以在主存儲庫中創建名爲「項目1」,「項目2」等的分支以反映項目的當前狀態。在我建議的WoW中,您可以永遠保留子回購,或者至少在項目的生命週期結束之前。在這種情況下,主要回購中的分支將大大反映特定項目的狀態和階段。 – Zloj

+0

@MartinDusek也看到我關於gerrit的更新。可能比GIT更好。 – Zloj