tpg*_*114 215 git git-submodules
我有一个Git存储库,里面有几个子模块.如何git submodule init
在运行后列出所有子模块的名称?
该git submodule foreach
命令可以回显子模块的名称,但只有在检出后才能使用,这在init步骤之后没有发生.链中有更多的步骤需要在签出之前发生,我不希望将子模块的名称硬连接到脚本中.
那么是否有一个Git命令来获取所有当前已注册但尚未检出的子模块的名称?
Ikk*_*kke 146
您可以使用与git submodule init
使用本身相同的机制,即查看.gitmodules
.此文件枚举每个子模块路径及其引用的URL.
例如,从存储库的根目录,cat .gitmodules
将内容打印到屏幕(假设您有cat
).
因为.gitmodule文件具有Git配置格式,所以您可以使用git config来解析这些文件:
git config --file .gitmodules --name-only --get-regexp path
Run Code Online (Sandbox Code Playgroud)
会显示所有子模块条目,并显示
git config --file .gitmodules --get-regexp path | awk '{ print $2 }'
Run Code Online (Sandbox Code Playgroud)
你只能获得子模块路径.
Jon*_*ops 88
如果要显示嵌套的子模块,可以使用git submodule status
或可选git submodule status --recursive
.
来自GIT SCM文档:
显示子模块的状态.这将打印SHA-1的当前签出的承诺每个子模块,与子模块路径沿和git的输出描述为SHA-1.每个SHA-1将与前缀 - 如果子模块没有初始化,+如果当前已签出子模块承诺不符,SHA-1在含仓库和U如果子模块具有合并冲突的索引中找到.
mho*_*815 58
要仅返回已注册子模块的名称,可以使用以下命令:
grep path .gitmodules | sed 's/.*= //'
Run Code Online (Sandbox Code Playgroud)
把它想象成git submodule --list
不存在的东西.
A.T*_*.T. 51
以下命令将列出子模块:
git submodule--helper list
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
<mode> <sha1> <stage> <location>
Run Code Online (Sandbox Code Playgroud)
注意:需要git 2.7.0或更高版本.
小智 22
我可以看到已经选择了答案,但对于到达此页面的任何其他人:
$ git submodule
Run Code Online (Sandbox Code Playgroud)
将列出指定git仓库中的所有子模块.
干杯
Rob*_*ahl 16
我用这个:
git config --list|egrep ^submodule
Run Code Online (Sandbox Code Playgroud)
Max*_*tor 16
我注意到在这个问题的答案中提供的命令给了我正在寻找的信息:
git ls-files --stage | grep 160000
Run Code Online (Sandbox Code Playgroud)
ben*_*sch 11
如果您不介意仅对初始化的子模块进行操作,则可以使用它git submodule foreach
来避免文本解析.
git submodule foreach --quiet 'echo $name'
Run Code Online (Sandbox Code Playgroud)
Pol*_*lot 10
使用内置 git 函数显示有关每个子模块的所有信息:
git submodule foreach -q git config -l
Run Code Online (Sandbox Code Playgroud)
或者只是 URL-s:
git submodule foreach -q git config remote.origin.url
Run Code Online (Sandbox Code Playgroud)
从这里偷来的。
我用这个:
git submodule status | cut -d' ' -f3-4
Run Code Online (Sandbox Code Playgroud)
输出(路径+版本):
tools/deploy_utils (0.2.4)
Run Code Online (Sandbox Code Playgroud)
小智 7
这对我有用:
git ls-files --stage | grep ^160000
Run Code Online (Sandbox Code Playgroud)
基于这篇伟大的文章:http://www.speirs.org/blog/2009/5/11/understanding-git-submodules.html
编辑:必读 grep ^160000
只是在子模块路径讨好,夫人...
git config --list | grep \^submodule | cut -f 2 -d .
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)Vendor/BaseModel Vendor/ObjectMatcher Vendor/OrderedDictionary Vendor/_ObjC Vendor/XCodeHelpers
git config
允许指定配置文件。
并且.gitmodules
是一个配置文件。
因此,借助“ 使用cut命令将空间用作定界符 ”:
git config --file=.gitmodules --get-regexp ^^submodule.*\.path$ | cut -d " " -f 2
Run Code Online (Sandbox Code Playgroud)
那只会列出路径,每个声明的子模块一个。
- 对于其中有空格的子模块,此操作将失败。
子模块路径可能包含换行符,如
Run Code Online (Sandbox Code Playgroud)git submodule add https://github.com/hilbix/bashy.git "sub module" git mv 'sub module' $'sub\nmodule'
作为更可靠的选择,Tino建议:
Run Code Online (Sandbox Code Playgroud)git config -z --file .gitmodules --get-regexp '\.path$' | \ sed -nz 's/^[^\n]*\n//p' | \ tr '\0' '\n'
对于其中包含换行符的路径(可以使用创建
git mv
),请不要| tr '\0' '\n'
使用,并使用类似的方式... | while IFS='' read -d '' path; do ...
对bash进行进一步处理。
这需要现代的bash能够理解read -d ''
(不要忘记之间的空格-d and ''
)。
归档时间: |
|
查看次数: |
148559 次 |
最近记录: |