作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含多个子模块的项目,我想列出每个子模块的相对深度
该项目:
main_project
submodule1
submodule1\submodule1_1
submodule1\submodule2_1\submodule2_1_1
submodule2\submodule2_1\submodule2_1_1\submodule2_1_1_1\
submodule3
我想得到的输出:
submodule1 - level 0
submodule1\submodule1_1 - level 1
submodule1\submodule2_1\submodule2_1_1 - level 2
submodule2\submodule2_1\submodule2_1_1\submodule2_1_1_1\ - level 3
submodule3 - level 0
最佳答案
git submodule foreach -q --recursive git rev-parse --git-dir |
awk '{split($0, a, "/modules/", s); print $0, "- Level", length(s)-1}'
解释:
git submodule foreach -q --recursive
对所有递归子模块运行命令。
git rev-parse --git-dir
对每个子模块运行此命令 — 显示其
.git/modules
的路径目录。例子:
$ git submodule foreach -q --recursive git rev-parse --git-dir
$root/.git/modules/mod1
$root/.git/modules/mod2
$root/.git/modules/mod3
$root/.git/modules/mod3/modules/subdir/submodule
示例中的所有模块都是 0 级模块,最后一个是 1 级模块。由于存在子目录(子模块比子模块的根更深),因此计数斜线无济于事。让我们数数
/modules/
与
awk
:
awk '{split($0, a, "/modules/", s); print $0, "- Level", length(s)-1}'
每个输入行都被
/modules/
分割并将分隔符列表放入数组
s
.然后我们只计算
/modules/
的数量并很好地打印结果:
git submodule foreach -q --recursive git rev-parse --git-dir |
awk '{split($0, a, "/modules/", s); print $0, "- Level", length(s)-1}'
$root/.git/modules/mod1 - Level 0
$root/.git/modules/mod2 - Level 0
$root/.git/modules/mod3 - Level 0
$root/.git/modules/mod3/modules/subdir/submodule - Level 1
打印子模块工作目录:
$ git submodule foreach -q --recursive 'pwd; git rev-parse --git-dir' |
awk 'NR%2==1 {submodule=$0} NR%2==0 {split($0, a, "/modules/", s); print submodule, "- Level", length(s)-1}':
$root/mod1 - Level 0
$root/third-party/mod2 - Level 0
$root/third-party/mod3 - Level 0
$root/third-party/mod3/subdir/submodule - Level 1
关于git - 如何打印子模块级别/深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65324989/
我是一名优秀的程序员,十分优秀!