在git存储库中列出子模块
我有一个git仓库中有几个子模块。 如何在git submodule init
运行后列出所有子模块的名称?
git submodule foreach
命令可以回显子模块的名字,但是只有在init步骤之后没有发生的情况下才能使用。 链中有更多的步骤需要在可以检出之前进行,而且我不想将子模块的名称硬连线到脚本中。
那么是否有一个git命令来获取所有当前注册但尚未签出的子模块的名称?
您可以使用与git submodule init
使用自身相同的机制,即查看.gitmodules
。 该文件枚举每个子模块path及其引用的url。
例如,从回购的根, cat .gitmodules
将打印内容到屏幕(假设你有cat
)。
编辑:
由于.gitmodule文件具有gitconfiguration格式,因此可以使用git config来parsing这些文件:
git config --file .gitmodules --name-only --get-regexp path
会告诉你所有的子模块条目,并与
git config --file .gitmodules --get-regexp path | awk '{ print $2 }'
你只会得到子模块path本身。
只返回已注册子模块的名称,您可以使用此命令。
grep path .gitmodules | sed 's/.*= //'
把它看作是不存在的git子模块–list
你可以使用git submodule status
或者可选的git submodule status --recursive
如果你想显示嵌套的子模块的话,可以使用git submodule status --recursive
。
从GIT SCM文档:
显示子模块的状态。 这将为每个子模块打印当前签出提交的SHA-1,以及为SHA-1描述的子模块path和git输出。 如果子模块未初始化,则每个SHA-1都将加前缀+,如果当前检出的子模块提交与包含存储库的索引中find的SHA-1不匹配,则为U,如果子模块存在合并冲突。
以下命令将列出子模块:
git submodule--helper list
输出是这样的:
<mode> <sha1> <stage> <location>
注意:需要git 2.7.0或以上版本。
我使用这个:
git config --list|egrep ^submodule
我注意到在这个问题的答案中提供的命令给了我正在寻找的信息:
.gitmodule中找不到子模块的path的子模块映射
git ls-files --stage | grep 160000
我可以看到答案已经被选中,但对于任何其他人来说,这个页面:
$ git submodule
将列出指定的git仓库中的所有子模块。
干杯
您可以使用:
git submodule | awk '{ print $2 }'
我使用这个:
git submodule status | cut -d' ' -f3-4
输出(path+版本):
tools/deploy_utils (0.2.4)
只是 子模块的path ,女士…
git config --list | grep \^submodule | cut -f 2 -d .
Vendor/BaseModel Vendor/ObjectMatcher Vendor/OrderedDictionary Vendor/_ObjC Vendor/XCodeHelpers
👍🏼
git config
允许指定一个configuration文件。
.gitmodules
是一个configuration文件。
所以,借助“ 以空格作为分割命令 ”的帮助:
git config --file=.gitmodules --get-regexp ^^submodule.*\.path$ | cut -d " " -f 2
这将只列出path,每个声明的子模块。
这对我工作:
git ls-files --stage | grep $160000
基于这个伟大的文章: http : //www.speirs.org/blog/2009/5/11/understanding-git-submodules.html
如果你不介意只在初始化的子模块上运行,你可以使用git submodule foreach
来避免文本parsing。
git submodule foreach --quiet 'echo $name'