将子模块更新为最新的提交

我有一个项目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帮助我。