我正在开发一个包含submodules
的git repo。我在所有子模块(包括父模块)中都有相同名称的分支(如master
,development
..),它们都跟踪相应的远程分支。
我希望一次在所有子模块中检出相同的分支。换句话说,我想要的是,如果我切换到父模块中的development
分支,所有子模块也应切换到development
分支,以便我的工作树保持与分支一致。
手动做这件事既痛苦又重复。有捷径吗?
我在git-alias
和bash script
的帮助下实现了这一目标。
以下是我从@qbein's answer获取的名为git-rcheckout.sh的bash脚本
#!/bin/bash
((!$#)) && echo No branch name, command ignored! && exit 1
git checkout $1 && git submodule foreach --recursive git checkout $1
接下来,我将此脚本别名为told by @u0b34a0f6ae的rcheckout命令
git config --global alias.rcheckout '!sh ~/path/to/script/git-rcheckout.sh'
问题:目前它仅适用于从父模块执行git rcheckout branch-name
的情况。您可以更新bash脚本以从子模块执行此操作,但我太懒了。所以欢迎提出建议。
你可以使用--recurse-submodule
标志。例如:git checkout master --recurse-submodules
使用--recurse-submodules将根据超级项目中记录的提交更新所有初始化子模块的内容。 [https://git-scm.com/docs/git-checkout#git-checkout---no-recurse-submodules]