【问题标题】:How to print submodules levels/depth如何打印子模块级别/深度
【发布时间】:2021-03-27 05:10:52
【问题描述】:

我有一个包含多个子模块的项目,我想列出每个子模块的相对深度 项目:

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 --recursive "pwd | wc -c'/'" 但它不起作用....
  • @LeGEC 尝试将其作为选项 git submodule foreach --recursive "awk -F"${char}" '{print NF}'
  • 那是一条线。你试过把它写成两行吗? :)
  • 您在将"..." 参数中传递给git submodule foreach ... 的脚本转义时遇到问题。您可以通过将命令写入文件(例如/tmp/count.sh)并调用git submodule ... /tmp/count.sh来解决转义问题。

标签: git


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-01
    • 2013-06-24
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多