我有一个Git存储库,其中有几个子模块。如何在git子模块init运行后列出所有子模块的名称?
git子模块foreach命令可以回显子模块的名称,但这只有在它们被签出后才有效,而在init步骤之后没有发生。在签出之前,链中还有更多的步骤需要执行,我不希望将子模块的名称硬连接到脚本中。
那么是否存在一个Git命令来获取所有当前已注册但尚未签出的子模块的名称?
我有一个Git存储库,其中有几个子模块。如何在git子模块init运行后列出所有子模块的名称?
git子模块foreach命令可以回显子模块的名称,但这只有在它们被签出后才有效,而在init步骤之后没有发生。在签出之前,链中还有更多的步骤需要执行,我不希望将子模块的名称硬连接到脚本中。
那么是否存在一个Git命令来获取所有当前已注册但尚未签出的子模块的名称?
当前回答
Use:
$ git submodule
它将列出指定Git存储库中的所有子模块。
其他回答
如果你想要显示嵌套的子模块,你可以使用git submodule status或者git submodule status——recursive。
从Git文档中:
显示子模块的状态。的SHA-1 的子模块的当前签出提交 子模块路径和git的输出为SHA-1描述。每一个 如果子模块未初始化,SHA-1将以-作为前缀,+ 如果当前检出的子模块提交不匹配SHA-1 在包含该子模块的存储库的索引中找到U 存在合并冲突。
Use:
$ git submodule
它将列出指定Git存储库中的所有子模块。
如果你不介意只对初始化的子模块进行操作,你可以使用git子模块foreach来避免文本解析。
git submodule foreach --quiet 'echo $name'
下面的命令将列出子模块:
git submodule--helper list
输出如下所示:
<mode> <sha1> <stage> <location>
注意:需要Git 2.7.0或以上版本。
你可以使用与git子模块init使用自身相同的机制,即查看.gitmodules。该文件枚举每个子模块路径及其引用的URL。
例如,从存储库的根目录,cat .gitmodules将把内容打印到屏幕上(假设你有cat)。
因为.gitmodule文件有Git配置格式,你可以使用Git配置来解析这些文件:
git config --file .gitmodules --name-only --get-regexp path
将显示所有子模块条目,并与
git config --file .gitmodules --get-regexp path | awk '{ print $2 }'
您只能得到子模块路径本身。