我已經在我的天真,成立了一個git子模塊和對待它像一個顛覆外部 - 即它現在充滿了我剛剛意識到還沒有提交或任何推的變化。如何在git子模塊中「提交」更改?
有一些簡單的方法來提交/推子模塊更改回上游回購? Git推薦的技術是以這種方式在單獨的(但是鏈接的)存儲庫上同時進行開發?
我已經在我的天真,成立了一個git子模塊和對待它像一個顛覆外部 - 即它現在充滿了我剛剛意識到還沒有提交或任何推的變化。如何在git子模塊中「提交」更改?
有一些簡單的方法來提交/推子模塊更改回上游回購? Git推薦的技術是以這種方式在單獨的(但是鏈接的)存儲庫上同時進行開發?
子模塊是它自己的回購/工作區,擁有自己的.git
目錄。
所以,第一次提交/把你的子模塊的變更:
$ cd path/to/submodule
$ git add <stuff>
$ git commit -m "comment"
$ git push
然後告訴你的主要項目跟蹤更新版本:
$ cd /main/project
$ git add path/to/submodule
$ git commit -m "updated my submodule"
$ git push
除了git似乎已經將子模塊放入匿名分支時... $ git.exe b -a *(無分支) – rogerdpack 2011-12-03 02:48:58
@rogerdpack - 你是對的。子模塊通常以「不分支」結束。在添加/提交到子模塊之前,您經常需要檢查一些分支。 – timdev 2011-12-23 16:57:30
即使這被標記爲重複,因爲你的回答比其他的更清楚 – 2013-11-21 20:12:09
,然後才能提交和推送,你需要初始化工作庫樹子模塊。 我使用的龜做以下的事情:
首先檢查是否存在git的文件(不是目錄)
如果有git的文件中,切切實實爲追蹤本地樹.git目錄。 你仍然需要一個分支(你可以創建一個)或切換到主(有時不工作)。 最好做的是 - git fetch - git pull。不要忽略提取。現在
您的提交和拉將與您的起源/主同步
請注意,如果你犯了一堆各種子模塊的變化,你可以(或將很快就能)在一個推一切去(即從父回購一個推),具有:
git push --recurse-submodules=on-demand
git1.7.11([ANNOUNCE] Git 1.7.11.rc1)提到:
「
git push --recurse-submodules
」學會有選擇地考慮子模塊綁定到上層項目的歷史,推動他們。
this patch和--on-demand
選項後可能做到:
--recurse-submodules=<check|on-demand|no>::
確保所有子模塊的提交使用的修訂推可在一個遠程跟蹤分支。
- 如果使用
check
,將檢查所有要推送的版本中更改的子模塊提交在遠程可用。
否則,推送將被中止並以非零狀態退出。- 如果使用
on-demand
,則會推送修訂中要更改的所有子模塊。
如果按需無法推送所有必需的修訂,它也將被中止並以非零狀態退出。
此選項僅適用於一層嵌套。其他子模塊內子模塊的更改不會被推送。
$ git submodule status --recursive
在這種情況下也是救命的人。你可以使用它和gitk --all
來跟蹤你的sha1,並驗證你的子模塊是指向你認爲他們是。
注意:http://stackoverflow.com/questions/3131912/why-are-git-submodules-incompatible-with-svn-externals/3132221#3132221和http://stackoverflow.com/questions/2879414/git -submodule-svn-external/2879490#2879490可以幫助說明子模塊和外部的區別。 – VonC 2011-04-04 19:03:26