简单地递归git pull所有的git子模块

gip*_*any 4 git git-submodules

我的个人存储库有一些存储库作为子模块.以及以下命令

$ git submodule foreach git pull origin master
Run Code Online (Sandbox Code Playgroud)

在进入ruby存储库后面对以下结果,因为ruby存储库似乎没有主分支并且"git pull"停止了.

Entering 'rails'
From git://github.com/rails/rails
 * branch            master     -> FETCH_HEAD
Already up-to-date.
Entering 'roo'
From git://github.com/hmcgowan/roo
 * branch            master     -> FETCH_HEAD
Already up-to-date.
Entering 'ruby'
fatal: Couldn't find remote ref master
Stopping at 'ruby'; script returned non-zero status.
Run Code Online (Sandbox Code Playgroud)

所以我的问题是what should I do to git pull for all of submodules only by git command?我应该为此制作一个剧本吗?我希望git提供的一个命令行可以实现这一点.

twa*_*erg 5

git子模块通常处于分离头状态,因此git pull在合并阶段时它们无法理解您的意思。如果您想做的只是将最新更改放入存储库,请尝试git submodule foreach git fetch改为。如果您想让每个子模块master更新到各自的origin/master,那么您可以跟进git submodule foreach git checkout master; git submodule foreach git merge origin/master

然后,当然,您需要决定您希望主存储库使用每个子模块的哪个版本(我不建议一直盲目地使用origin/master- 它可能不稳定 - 最好选择一个已知良好的标签或其他东西),检查子模块中的这些版本,并在主存储库中跟进适当的git adds 和。git commit


Shp*_*ink 5

只需添加|| true到您的子模块命令:

git submodule foreach 'git commit -m "my commit message" || true'
Run Code Online (Sandbox Code Playgroud)