[当我们在git仓库中有很多(例如20个)子模块时,我们可以像这样安装(并更新)它们:
git submodules update --init --recursive
Git会在此命令之后尝试(递归)下载每个子模块。如果我们要使某些子模块成为可选的(如插件)怎么办?
[如何将默认标记为“好,从现在开始使用”,如何使git默认情况下跳过这些可选的子模块并作为常规子模块处理?
实现此目的的一种方法是:
[To get the list of submodules和format它仅显示子模块路径:
git submodule--helper list | awk '{$1=$2=$3=""; print substr($0,4)}'
git -c submodule."X".update=none submodule update --init --recursive
将这两个命令与xargs和tr实用程序结合,
git submodule--helper list | awk '{$1=$2=$3=""; print substr($0,4)}' | xargs -pI % echo -c submodule.\"%\".update=none | tr '\n' ' ' | xargs -0I % echo git %submodule update --init --recursive | bash -
xargs util的交互模式允许用户通过提供(y/n)
格式的输入来选择要更新的子模块。输入y
指示在更新期间排除了子模块。输入n
表示未采取任何措施。
注:
要(永久地)排除或包含子模块X,应将属性submodule."X".update
添加到local repo的gitconfig文件中。对于排除,请将submodule."X".update=none
添加到配置文件中,对于排除,只需删除属性或将其设置为true
。
要排除嵌套子模块,请遵循this