2014-08-29 73 views
0

這裏是我的項目結構你如何與git子模塊一起開發?

MainProject 
| README.md 
| src/ 
| lib/  # this is a submodule 

當我開發MainProject,我還將開發lib/,我的意思MainProject/lib/

當我按下時,我會將MainProject/lib/*中的所有更改複製到MainProject/../lib/,這是一個單獨的git目錄,然後按下。

之後,我將在MainProject/lib/遠程做一個子模塊更新爲最新。

然後,我將致力於在MainProject推變化。

罹患此病。你如何與git子模塊一起發展?

ADD

我想在lib/推到遠程lib庫中的所有變化。 和所有在MainProjectlib/旁邊變化推到遠程MainProject

所以,如果我直接把遠程lib倉庫內MainProject/lib 然後在MainProject遠程添加和提交併推送變化lib/旁邊。

如果別人克隆MainProject,做submodule update,他會獲得最新的來源是什麼?

.gitmodules

[submodule "lib"] 
    path = lib 
    url = [email protected]:XXX/YYY.git 
    branch = master 

回答

1

你不應該複製您的更改:您可以直接從MainProject/lib推到比在發現上游回購(git remote origin)同上游回購(一種在git remote originMainProject/../lib

MainProject/lib是在自己的權利的嵌套式回購:您可以添加提交和直接從它推他們。

但是,你必須回去MainProject/,添加,提交和推送,以記錄新gitlink(the special entry in the index of the parent repo which records the SHA1 of the submodule lib


添加並提交和MainProjectlib/旁邊變化遠程

號:當你的lib提交anyhting,這將改變gitlink(以下簡稱 'LIB' 在項index)

通過「回到MainProject」(意思是說,你在MainProject/lib,你做的是cd ..),你可以做一個git add。,這將:

  • 添加LIB旁/所有更改
  • 紀錄lib/子模塊(以下簡稱 'lib' gitlink條目)

相關的新的SHA1但推MainProject,完成與更新的gitlink'lib'條目,你要確保克隆你的MainProject的任何人都會在那個確切更新的SHA1處取回lib

+0

謝謝。你是什​​麼意思「回到MainProject /,添加,提交和推送......」?我在帖子中添加了一些內容。請閱讀並提供幫助。謝謝。 – Sato 2014-08-29 06:22:11

+0

@Sato我編輯了我的答案。從其父代回購MainProject的角度來看,如何查看'lib'是非常重要的:作爲索引中的gitlink條目,以便記錄子模塊檢出的確切SHA1。如果您在子模塊中創建一個新的提交,您需要推送它,但也要回到主項目並添加/提交該gitlink條目。 – VonC 2014-08-29 06:49:02

+0

所以當其他人克隆'MyProject'並做一個'submodule update'時,它會得到確切的SHA1(記錄在'MainProject'中的gitlink條目)而不僅僅是HEAD? – Sato 2014-08-29 07:19:44