我有一个Git存储库,其中有几个子模块。如何在git子模块init运行后列出所有子模块的名称?

git子模块foreach命令可以回显子模块的名称,但这只有在它们被签出后才有效,而在init步骤之后没有发生。在签出之前,链中还有更多的步骤需要执行,我不希望将子模块的名称硬连接到脚本中。

那么是否存在一个Git命令来获取所有当前已注册但尚未签出的子模块的名称?


当前回答

下面是另一种从. Git modules解析Git子模块名称的方法,不需要sed或花哨的IFS设置。: -)

#!/bin/env bash

function stripStartAndEndQuotes {
  temp="${1%\"}"
  temp="${temp#\"}"
  echo "$temp"
}

function getSubmoduleNames {
  line=$1
  len=${#line} # Get line length
  stripStartAndEndQuotes "${line::len-1}" # Remove last character
}

while read line; do
  getSubmoduleNames "$line"
done < <(cat .gitmodules | grep "\[submodule.*\]" | cut -d ' ' -f 2-)

其他回答

你可以使用:

git submodule | awk '{ print $2 }'

为了只返回已注册的子模块的名称,你可以使用这个命令:

grep path .gitmodules | sed 's/.*= //'

可以把它看成是git子模块list,它并不存在。

使用内置git函数显示每个子模块的所有信息:

git submodule foreach -q git config -l

或者只是url:

git submodule foreach -q git config remote.origin.url

从这里偷来的。

按名称列出所有子模块:

Git子模块——quiet foreach——递归echo $name

Use:

$ git submodule

它将列出指定Git存储库中的所有子模块。