Git:在所有子模块上递归切换分支(checkout)

时间:2017-12-15 14:41:45

标签: git git-submodules git-alias

我正在处理包含<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> <div class="ico-selector"> <a href=""><i class="fa fa-chevron-left"></i></a> <img src="https://d1j8pt39hxlh3d.cloudfront.net/development/emojione/2.2/843/2270.svg" /> <a href=""><i class="fa fa-chevron-right"></i></a> <p>My Icon</p> </div>的git仓库。我在所有子模块(包括父模块)中都有相同名称的分支(如submodulesmaster ..),它们都跟踪相应的远程分支。

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

手动做这件事既痛苦又重复。有快捷方式吗?

2 个答案:

答案 0 :(得分:1)

我在developmentgit-alias的帮助下实现了这一目标。

以下是我从@qbein's answer获取的名为git-rcheckout.sh的bash脚本

bash script

接下来,我将此脚本别名为rcheckout命令told by @u0b34a0f6ae

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

ISSUE: 目前它仅在您从父模块执行git config --global alias.rcheckout '!sh ~/path/to/script/git-rcheckout.sh' 时才有效。您可以更新bash脚本以从子模块执行此操作,但我太懒了。所以欢迎提出建议。

答案 1 :(得分:0)

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

  

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