我有一个Git存储库,其中有几个子模块。如何在git子模块init运行后列出所有子模块的名称?
git子模块foreach命令可以回显子模块的名称,但这只有在它们被签出后才有效,而在init步骤之后没有发生。在签出之前,链中还有更多的步骤需要执行,我不希望将子模块的名称硬连接到脚本中。
那么是否存在一个Git命令来获取所有当前已注册但尚未签出的子模块的名称?
我有一个Git存储库,其中有几个子模块。如何在git子模块init运行后列出所有子模块的名称?
git子模块foreach命令可以回显子模块的名称,但这只有在它们被签出后才有效,而在init步骤之后没有发生。在签出之前,链中还有更多的步骤需要执行,我不希望将子模块的名称硬连接到脚本中。
那么是否存在一个Git命令来获取所有当前已注册但尚未签出的子模块的名称?
当前回答
我用这个:
git config --list|egrep ^submodule
其他回答
我注意到在回答这个问题时提供的命令为我提供了我正在寻找的信息:
在.gitmodule中找不到非子模块路径的子模块映射
git ls-files --stage | grep 160000
下面是另一种从. 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函数显示每个子模块的所有信息:
git submodule foreach -q git config -l
或者只是url:
git submodule foreach -q git config remote.origin.url
从这里偷来的。
如果你想要显示嵌套的子模块,你可以使用git submodule status或者git submodule status——recursive。
从Git文档中:
显示子模块的状态。的SHA-1 的子模块的当前签出提交 子模块路径和git的输出为SHA-1描述。每一个 如果子模块未初始化,SHA-1将以-作为前缀,+ 如果当前检出的子模块提交不匹配SHA-1 在包含该子模块的存储库的索引中找到U 存在合并冲突。
如果没有任何.gitmodules文件,但在.git/modules/中存在子模块配置:
find .git/modules/ -name config -exec grep url {} \;