我有一个Git存储库,其中有几个子模块。如何在git子模块init运行后列出所有子模块的名称?
git子模块foreach命令可以回显子模块的名称,但这只有在它们被签出后才有效,而在init步骤之后没有发生。在签出之前,链中还有更多的步骤需要执行,我不希望将子模块的名称硬连接到脚本中。
那么是否存在一个Git命令来获取所有当前已注册但尚未签出的子模块的名称?
我有一个Git存储库,其中有几个子模块。如何在git子模块init运行后列出所有子模块的名称?
git子模块foreach命令可以回显子模块的名称,但这只有在它们被签出后才有效,而在init步骤之后没有发生。在签出之前,链中还有更多的步骤需要执行,我不希望将子模块的名称硬连接到脚本中。
那么是否存在一个Git命令来获取所有当前已注册但尚未签出的子模块的名称?
当前回答
这招对我很管用:
git ls-files --stage | grep ^160000
它基于这篇伟大的文章:理解Git子模块
它必须读取grep ^160000。
其他回答
我用这个:
git config --list|egrep ^submodule
获取路径
grep url .gitmodules | sed 's/.*= //'
在回购中得到名字
grep path .gitmodules | sed 's/.*= //'
我注意到在回答这个问题时提供的命令为我提供了我正在寻找的信息:
在.gitmodule中找不到非子模块路径的子模块映射
git ls-files --stage | grep 160000
你可以使用:
git submodule | awk '{ print $2 }'
如果你不介意只对初始化的子模块进行操作,你可以使用git子模块foreach来避免文本解析。
git submodule foreach --quiet 'echo $name'