2010-10-21 55 views
10

我很難找出如何改變我的心態git,並遇到以下問題。我有這種情況,我們有一個共享引擎和多個使用引擎的項目。內部開發團隊和第二方團隊可能在使用共享引擎的項目上工作,並且希望在開發過程中儘可能多地使用共享引擎的HEAD,直到出貨前幾周纔會共享引擎將被標記並分支,然後項目將使用該分支。項目團隊一次只能在一個項目中工作,但可能會在調試過程中對共享引擎進行更改或添加功能。當他們提交這些更改時,我們的構建系統會運行以查找可能在提交時引入的任何問題。如何讓我的svn:externals策略適應git子模塊?

我(想我)想用一個新的項目/新公司使用這個模型。在SVN,結構是這樣的: shared_engine

project_in_dev-+ 
       +- svn:external shared_engine:head 
project_about_to_ship-+ 
         +-svn:external shared_engine_rev1_branch 

這工作得非常好:

  • 項目開發商可以做一個命令檢查所有的依存關係,他們將需要
  • 項目開發商可以輕鬆實現發動機工作並承諾共享引擎
  • 我們可以輕鬆地修改或更改項目正在使用的共享引擎與外部和修訂
  • 引擎更新,很容易獲得與

確定你的日常「從根項目更新」,現在我已經搬到混帳,和子模塊似乎是應對外部代碼的新途徑,但它好像我失去了一些功能。

  • 這是一個多步驟的過程,以實際獲得項目的所有依賴關係。項目開發人員必須做一個git clone然後一個git子模塊init/git submodule update --recursive
  • 這是更新根項目和子模塊的多步驟過程,因此如果其他開發人員對根項目進行了更改,匹配的子模塊的變化,你沒有立即得到匹配的代碼,可能會非常困惑
  • 該子模塊被鎖定到一個特定的提交,如果你對子模塊進行更改,你將無法讓它與共享引擎的頭部
  • 我無法控制項目開發人員簽出的共享引擎的修訂版本,但沒有說明要更新的內容

所以我的問題如下:

  • 首先,是關於子模塊的上述假設是否正確?這似乎是基於我讀過的,但我不是100%確定,因爲我仍然在搞清楚git
  • 如果我的假設是正確的,我是否正確地處理了這個問題?在使用git時,我需要重新調整思路嗎?換句話說,是否有另一種方法來做我想要做的事情,需要以不同的方式思考過程?
  • 假設我沒有吹頭兩個,子模塊不會做我想要的,會怎樣?我閱讀了有關子樹合併的內容,但這些看起來並不完全正確,因爲看起來我無法將對共享代碼所做的更改恢復到存儲庫中。

非常感謝您的幫助和耐心。如果不是很明顯,我對git很陌生,我喜歡它,並且想擁抱它,但是我仍然有一些概念誤解,因爲我可能因爲使用中央回購多年而被腦損壞。我想學習!另外,我一整天都在忙碌着,看着各種博客帖子,stackoverflow問題等,但我仍然沒有得到它,我顯然需要它爲我的情況一步一步拼寫出來。我沒有同事問過這個問題,西雅圖地區的任何用戶羣可能會有一些git大師? :)

+0

只是說明一下,git 1.7添加了稀疏結帳,它解決了我的一些問題。最大的問題是,讓開發人員在同一個庫分支上工作的最大問題仍然沒有完全解決。謝謝你的回答,他們確實給了我想要在哪裏看,但我不能標記爲真正回答,但我是upvoting :) – 2011-06-17 19:26:21

回答

4

你是正確的,一個子模塊總是引用某個特定的版本,當你git add子模塊目錄是固定的(因此你可以控制究竟什麼是簽出在開發商盒)。但是我將其視爲一項功能,因爲您可以隨時在需要時請求子模塊的HEAD。另一方面,這意味着當您簽出項目的舊狀態時,無論子模塊中發生了什麼變化,您總是會獲得相同的狀態。你可以把它們想象成svn externals,它被固定在一個特定的版本上。

至於子模塊的變化,它們只是正常的git repos,在這裏你可以使用正常的工作流程,就好像它們被克隆到自己的工作副本中一樣。與普通克隆有一個區別,即子模塊的簽出很可能是分離的頭部,所以當您在那裏進行更改時,您必須自行創建一個分支。

對於許多命令部分,是的,需要做更多的工作,這是付出這項功能的代價。如果有多個腳本,您可以添加一個執行子模塊簽出的腳本。

編輯

我發現了大約子模塊的詳細說明:http://longair.net/blog/2010/06/02/git-submodules-explained/

+0

感謝您的答案,它基本上確認子模塊的限制我的用例。腳本沒有幫助,不幸的是我有人與TortoiseGIT合作,所以沒有辦法給他們一個腳本:( – 2010-10-27 17:59:02

+0

@Chris AFAIR TortoiseGit也有一些與子模塊相關的命令(現在無法檢查,因爲目前我' m沒有運行窗口)。 – Rudi 2010-10-28 06:18:00