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

时间:2018-03-05 12:53:21

标签: git plugins git-submodules

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

git submodules update --init --recursive 

Git尝试在此命令后下载每个子模块(递归)。如果我们想让一些子模块可选(如插件)怎么办?

我们如何让git跳过默认下载这些可选子模块,并在我们标记这个子模块时将其作为通常的子模块处理"好的,从现在开始使用它"?

1 个答案:

答案 0 :(得分:0)

一种方法是:

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

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

function presentFunction() {
    if(document.contains(document.getElementById("p5")))
    {
        document.getElementById("p5").remove();
        document.getElementById("ptr5").remove();
        document.getElementById("p4").style.transform = "translate(100px,0px)";
        document.getElementById("p3").style.transform = "translate(100px,0px)";
        document.getElementById("p2").style.transform = "translate(100px,0px)";
        document.getElementById("p1").style.transform = "translate(100px,0px)";

        document.getElementById("ptr4").style.transform = "translate(100px,0px)";
        document.getElementById("ptr3").style.transform = "translate(100px,0px)";
        document.getElementById("ptr2").style.transform = "translate(100px,0px)";
        document.getElementById("ptr1").style.transform = "translate(100px,0px)";
    }
    else if(document.contains(document.getElementById("p4")))
    {
        document.getElementById("p4").remove();
        document.getElementById("ptr4").remove();
        document.getElementById("p3").style.transform = "translate(200px,0px)";
        document.getElementById("p2").style.transform = "translate(200px,0px)";
        document.getElementById("p1").style.transform = "translate(200px,0px)";

        document.getElementById("ptr3").style.transform = "translate(200px,0px)";
        document.getElementById("ptr2").style.transform = "translate(200px,0px)";
        document.getElementById("ptr1").style.transform = "translate(200px,0px)";
    }
    else if(document.contains(document.getElementById("p3")))
    {
        document.getElementById("p3").remove();
        document.getElementById("ptr3").remove();

        document.getElementById("p2").style.transform = "translate(300px,0px)";
        document.getElementById("p1").style.transform = "translate(300px,0px)";

        document.getElementById("ptr2").style.transform = "translate(300px,0px)";
        document.getElementById("ptr1").style.transform = "translate(300px,0px)";
    }
    else if(document.contains(document.getElementById("p2")))
    {
        document.getElementById("p2").remove();
        document.getElementById("ptr2").remove();

        document.getElementById("p1").style.transform = "translate(400px,0px)";
        document.getElementById("ptr1").style.transform = "translate(400px,0px)";
    }
    else if(document.contains(document.getElementById("p1")))
    {
        document.getElementById("p1").remove();
        document.getElementById("ptr1").remove();
    }
}

To exclude a submodule X

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

将这两个命令与xargs和tr实用程序结合在一起,并进一步使用命令替换,

git -c submodule."X".update=none submodule update --init --recursive

xargs util的交互模式允许用户通过提供git $(git submodule--helper list | awk '{$1=$2=$3=""; print substr($0,4)}' | xargs -pI % echo -c submodule.\"%\".update=none | tr '\n' ' '| xargs echo) submodule update --init --recursive 格式的输入来选择要更新的子模块。输入(y/n)表示在更新期间排除了子模块。输入y表示未执行任何操作。

注意

  • 假定此处的子模块名称与其路径相同。但是,请查看here,以获取名称和路径有所不同的子模块名称。

  • 要(永久地)排除或包含子模块X,应将属性n添加到local repo的gitconfig文件中。对于排除,请使用此命令

    在配置文件中将submodule."X".update设置为submodule."X".update
    none

    并使用此命令取消设置

     git config --local submodule."X".update none
    
  • 要排除嵌套子模块,请遵循this