我正在开发一个包含submodules
. 我在所有子模块(包括父模块)中都有同名的分支(比如master
,development
..),它们都跟踪它们相应的远程分支。
我想一次在所有子模块中签出相同的分支。换句话说,我想要的是,如果我切换到development
父模块中的分支,所有子模块也应该切换到development
分支,以便我的工作树与分支保持一致。
手动执行此操作是痛苦且重复的。有捷径吗?
我正在开发一个包含submodules
. 我在所有子模块(包括父模块)中都有同名的分支(比如master
,development
..),它们都跟踪它们相应的远程分支。
我想一次在所有子模块中签出相同的分支。换句话说,我想要的是,如果我切换到development
父模块中的分支,所有子模块也应该切换到development
分支,以便我的工作树与分支保持一致。
手动执行此操作是痛苦且重复的。有捷径吗?
您可以使用该--recurse-submodule
标志。例如:git checkout master --recurse-submodules
使用 --recurse-submodules 将根据超级项目中记录的提交更新所有初始化子模块的内容。[ https://git-scm.com/docs/git-checkout#git-checkout---no-recurse-submodules]
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 脚本以从子模块中执行此操作,但我太懒了。所以欢迎提出建议。