将子模块更新为最新的提交
我有一个项目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
帮助我。