简单的方法来拉最新的所有git submodules
我们使用git子模块来管理一些依赖于我们开发的其他库的大型项目。 每个库都是一个单独的回购库,作为子模块引入依赖项目。 在开发过程中,我们经常想要抓住每个从属子模块的最新版本。
git是否有内置命令来执行此操作? 如果没有,那么Windows批处理文件或类似的可以做到这一点?
对于git 1.8.2或更高--remote
,添加了--remote
选项以支持更新远程分支的最新技巧:
git submodule update --recursive --remote
这有附加的好处,即尊重.gitmodules
或.git/config
文件中指定的任何“非默认”分支(如果您碰巧有任何,默认是origin / master,在这种情况下,其中一些其他答案将作为好)。
对于git 1.7.3或更高版本,您可以使用(但下面的更新仍然适用):
git submodule update --recursive
要么:
git pull --recurse-submodules
如果你想把你的子模块放到回购指向的最新提交。
注意:如果这是您第一次签出回购,您需要使用--init
优先:
git submodule update --init --recursive
对于较老的git 1.6.1或更高版本,您可以使用类似的内容(修改为适合):
git submodule foreach git pull origin master
有关详细信息,请参阅git-submodule(1)
如果您需要将子模块的东西放入您的子模块存储库,请使用
git pull --recurse-submodules
git首先在1.7.3中学到了一个特性。
但是这不会在子模块中签出适当的提交(主存储库指向的那些提交)
要在您的子模块中签出适当的提交,您应该在使用后更新它们
git submodule update --recursive --remote
注意:这是从2009年开始,可能已经很好,但现在有更好的选择。
我们使用这个。 它被称为git-pup
:
#!/bin/bash
# Exists to fully update the git repo that you are sitting in...
git pull && git submodule init && git submodule update && git submodule status
把它放在一个合适的bin目录下(/ usr / local / bin)。 如果在Windows上,您可能需要修改语法才能使其运行:)
更新:
为了回应原作者关于将所有子模块的所有HEAD引入的评论 - 这是一个很好的问题。
我很确定git
在内部没有这个命令。 为了做到这一点,您需要确定子模块的真正用途。 这可能就像说master
是最新的分支一样简单......
在此之后,创建一个简单的脚本,执行以下操作:
git submodule status
。 输出行的第一个字符表示这一点。 如果一个子回购被修改,你可能不想继续。 git checkout master && git pull
。 检查错误。 我想提一下,这种风格并不是真正的git子模块。 通常情况下,你想说“LibraryX”的版本是“2.32”,并保持这种状态,直到我告诉它“升级”为止。
也就是说,从某种意义上说,你正在用所描述的脚本做什么,但更多的是自动完成。 需要小心!
更新2:
如果你在一个Windows平台上,你可能想看看使用Python来实现这个脚本,因为它在这些方面非常有用。 如果你使用的是unix / linux,那么我只是建议一个bash脚本。
需要澄清? 只需发表评论。
链接地址: http://www.djcxy.com/p/2697.html