将子模块更新为最新的提交
我有一个项目A,它是一个库,它用在项目B中。
项目A和B在github上都有一个单独的仓库,但在B里面有一个子模块A.
我编辑了库中的一些类,这是在回购A,我推动远程回购,所以图书馆(回购A)我们更新。
这些更新不反映在“引用”(子模块)子模块是指以前提交….我应该怎么做才能更新子模块上的git?
进入子模块目录:
cd projB/projA 从你的项目A( 不会更新你的父母,项目B的git状态)的回购:
 git pull origin master 
回到根目录检查更新:
 cd .. git status 
如果之前更新了子模块,则会显示如下所示的内容:
 # Not currently on any branch. # Changed but not updated: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: projB/projA (new commits) # 
然后,提交更新:
 git add projB/projA git commit -m "projA submodule updated" 
如果你更新了一个子模块并提交它,你需要去包含或者更高级别的仓库,并且在那里添加更改。
 git status 
会显示像这样的东西:
 modified: some/path/to/your/submodule 
子模块不同步的事实也可以看出来
 git submodule 
输出将显示:
 +afafaffa232452362634243523 some/path/to/your/submodule 
加号表示您的子模块指向顶级回购期望指向的位置。
只需添加此更改:
 git add some/path/to/your/submodule 
并承诺:
 git commit -m "referenced newer version of my submodule" 
在推进更改时,请确保先推进子模块中的更改,然后再推入外部回购中的引用更改。 这样更新的人将永远能够成功运行
 git submodule update 
有关子模块的更多信息,请参阅http://progit.org/book/ch6-6.html 。
既然你可以做git 1.8
 git submodule update --remote --merge 
这会将子模块更新为最新的远程提交。 然后您将需要提交更改,以便更新父存储库中的gitlink
 git commit 
如果没有第二个语句,SHA-1身份指向子模块将不会被更新,所以其他任何人都无法看到这个变化。
单行版本
 git submodule foreach "(git checkout master; git pull; cd ..; git add '$path'; git commit -m 'Submodule Sync')" 
我的项目应该使用“最新”的子模块。 在Mac OSX 10.11,git版本2.7.1中,我不需要进入我的子模块文件夹来收集它的提交。 我只是做了一个正规的
 git pull --rebase 
在顶层,它正确地更新了我的子模块。
  git submodule update --init帮助我。