2011-03-25 131 views
21

這可能嗎?想象一下,我有項目父母&孩子。兩者都是git respositories。子是Parent的子模塊。編輯git子模塊

我可以編輯內部的子版本&提交&將它們像普通存儲庫一樣推送?

或者我需要一個單獨的克隆的孩子的地方,我作出改變?

謝謝。

+0

另請參閱http://stackoverflow.com/questions/1979167/git-submodule-update/1979194#1979194 – VonC 2011-03-25 05:10:40

回答

26

你不需要一個單獨的克隆。子模塊文件夾是它自己的世界。只要編輯,提交,分支,並推動你的心臟的喜悅。

Git非常棒。 :-)

順便說一下,父存儲庫甚至會檢測子模塊文件夾內發生的更改,並提供您提交子模塊的當前狀態作爲父回購的克隆的新官方參考點。

重要提示:

確保您在開始之前,黑客做的子模塊文件夾內git checkout master(或其他一些分支)。

然後還要確保何時提交子模塊的更新狀態,您是否要push那些提交到公共回購站,或者至少您沒有改變或以其他方式更改子模塊內的歷史記錄之後 - 因爲這會破壞父母對子模塊歷史記錄的引用。

小心踩踏。 (帽尖@pjmorse的提醒。)

底線:

是。在子模塊文件夾內開發可能並且通常很方便但不是沒有風險。選擇你的發展模式明智地

+1

+1首先進行結賬。此外,在切換分支機構或在Parent中執行其他工作之前,您要確保您有一個乾淨的Child repo(提交任何更改)。 – 2011-03-25 01:29:41

+0

在父代執行簡單的日常(編輯,提交,拉取,推送)工作時,在父代回購中工作時,我還沒遇到子模塊中未完成更改的問題。不過,切換分支和子模塊更新操作可能會有風險。好點子! – 2011-03-25 01:39:21

+0

在克隆中開發並不是一個壞主意,只是爲了減少意外使用分離的HEAD犯下的可能性。你當然也可以使用鉤子來檢查你自己。 – Cascabel 2011-03-25 02:59:33

4

按照documentation

如果你想使一個子模塊內的變化,應先檢查出一個分支,進行更改,子模塊內發佈的變化,然後更新超級項目以引用新的提交。

就我所知,如果你在添加子模塊的分支上工作,你可以編輯Child並推回到它的存儲庫。但是,如果您不是將Child添加到Parent的開發人員,則您正在使用分離的頭部,並需要檢出單獨版本的Child以進行更改,或者進行更改並導出修補程序(使用git format-patch)爲其他人提交(通過git am)。

+0

「主人」很可能是您檢查的分支。但是你說得很好! – 2011-03-25 01:14:37