如何在git中添加可选的子模块?

问题描述 投票:8回答:1

[当我们在git仓库中有很多(例如20个)子模块时,我们可以像这样安装(并更新)它们:

git submodules update --init --recursive 

Git会在此命令之后尝试(递归)下载每个子模块。如果我们要使某些子模块成为可选的(如插件)怎么办?

[如何将默认标记为“好,从现在开始使用”,如何使git默认情况下跳过这些可选的子模块并作为常规子模块处理?

git plugins git-submodules
1个回答
0
投票

实现此目的的一种方法是:

  1. 获取仓库的子模块列表
  2. 获取每个子模块的用户输入(是否更新)
  3. 排除用户选择的子模块和,
  4. 更新子模块

[To get the list of submodulesformat它仅显示子模块路径:

git submodule--helper list | awk '{$1=$2=$3=""; print substr($0,4)}'

To exclude a submodule X

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

© www.soinside.com 2019 - 2024. All rights reserved.