协慌网

登录 贡献 社区

轻松获取最新的 git 子模块

我们使用 git 子模块来管理一些依赖于我们开发的许多其他库的大型项目。每个库都是作为子模块引入依赖项目的单独 repo。在开发过程中,我们经常想要抓住每个依赖子模块的最新版本。

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

如果你想把你的子模块拉到 repo 指向的最新提交 intead。

注意:如果这是您第一次签出--init需要先使用--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

在 init 上运行以下命令:

git submodule update --init --recursive

从 git repo 目录中,对我来说效果最好。

这将拉出所有最新的包括子模块。

解释

git - the base command to perform any git command
    submodule - Inspects, updates and manages submodules.
        update - Update the registered submodules to match what the superproject
        expects by cloning missing submodules and updating the working tree of the
        submodules. The "updating" can be done in several ways depending on command
        line options and the value of submodule.<name>.update configuration variable.
            --init without the explicit init step if you do not intend to customize
            any submodule locations.
            --recursive is specified, this command will recurse into the registered
            submodules, and update any nested submodules within.

在此之后你可以运行:

git submodule update --recursive

从 git repo 目录中,对我来说效果最好。

这将拉出所有最新的包括子模块。

解释

git - the base command to perform any git command
    submodule - Inspects, updates and manages submodules.
        update - Update the registered submodules to match what the superproject
        expects by cloning missing submodules and updating the working tree of the
        submodules. The "updating" can be done in several ways depending on command
        line options and the value of submodule.<name>.update configuration variable.
            any submodule locations.
            --recursive is specified, this command will recurse into the registered
            submodules, and update any nested submodules within.