5

我正在开发一个包含submodules. 我在所有子模块(包括父模块)中都有同名的分支(比如masterdevelopment..),它们都跟踪它们相应的远程分支。

我想一次在所有子模块中签出相同的分支。换句话说,我想要的是,如果我切换到development父模块中的分支,所有子模块也应该切换到development分支,以便我的工作树与分支保持一致。

手动执行此操作是痛苦且重复的。有捷径吗?

4

2 回答 2

4

您可以使用该--recurse-submodule标志。例如:git checkout master --recurse-submodules

使用 --recurse-submodules 将根据超级项目中记录的提交更新所有初始化子模块的内容。[ https://git-scm.com/docs/git-checkout#git-checkout---no-recurse-submodules]

于 2019-03-05T19:08:25.670 回答
3

git-alias我在和的帮助下实现了这一点bash script

以下是我的名为 git-rcheckout.sh 的 bash 脚本,取自@qbein 的回答

#!/bin/bash
((!$#)) && echo No branch name, command ignored! && exit 1
git checkout $1 && git submodule foreach --recursive git checkout $1

接下来,我将此脚本别名为 rcheckout 命令,正如@u0b34a0f6ae 所说

git config --global alias.rcheckout '!sh ~/path/to/script/git-rcheckout.sh'

ISSUE:目前它仅在您git rcheckout branch-name从父模块执行时才有效。您可能也可以更新 bash 脚本以从子模块中执行此操作,但我太懒了。所以欢迎提出建议。

于 2017-12-15T14:41:44.607 回答