在Git仓库中列出子模块

12 浏览
0 Comments

在Git仓库中列出子模块

在运行git submodule init之后,我有一个包含多个子模块的Git仓库。如何列出所有子模块的名称?

git submodule foreach命令可以显示子模块的名称,但这只有在它们被检出之后才能生效,而init步骤之后尚未发生检出。在可以检出之前,还有其他步骤需要完成,并且我不想在脚本中硬编码子模块的名称。

因此,是否有一条Git命令可以获取所有当前已注册但尚未检出的子模块的名称?

0
0 Comments

在Git存储库中列出子模块的原因可能是用户想要获取包括名称、路径和URL在内的子模块的列表。然而,用户尝试使用git config命令来实现这一目标,并且遇到了以下问题:命令没有返回任何结果,而且如果子模块路径中包含空格,awk部分将失败。

为了解决这个问题,可以使用以下方法:

1. 使用git config --file .gitmodules --name-only --get-regexp path命令,该命令将显示所有子模块条目的路径。

2. 使用git config --file .gitmodules --get-regexp path | awk '{ print $2 }'命令,该命令将只显示子模块的路径本身。

3. 如果只想获取所有内容,可以使用git config --file .gitmodules -l命令。

然而,需要注意的是,如果子模块路径中包含空格或换行符,上述方法可能会失败。为了解决这个问题,可以使用以下命令:git config -z --file .gitmodules --get-regexp '\.path$' | sed -nz 's/^[^\n]*\n//p' | tr '\0' '\n'。这个命令使用了现代的sedtr工具,可以处理包含空格或换行符的子模块路径。对于包含换行符的路径,可以将tr '\0' '\n'部分去掉,并使用... | while IFS='' read -d '' path; do ...进行进一步处理。

总之,通过使用适当的git config命令,可以获取包含子模块名称、路径和URL在内的列表。但是,需要注意处理子模块路径中可能存在的空格和换行符的情况。

0
0 Comments

在Git存储库中列出子模块的问题是因为需要查看每个子模块所在的分支,但是没有直接的命令可以提供这个信息。解决方法是使用一系列命令来获取子模块的分支信息。

首先,可以使用git submodule--helper list命令来列出所有子模块。这个命令需要Git版本2.7.0或更高版本。输出的结果包含子模块的模式、SHA1哈希值、阶段和位置。

然而,这个命令在git-scm.com上没有详细的文档。所以,可以尝试使用git ls-files --stage | grep ^160000命令来替代,它可以产生相同的结果。这个命令可以在旧版本的Git上使用,因此可以与旧版本兼容。

如果想要查看每个子模块所在的分支,可以使用以下命令:git submodule--helper list | awk '{ print $NF }'。这个命令将只返回子模块的位置信息,可以进一步查看每个子模块所在的分支。

需要注意的是,在submodule--helper命令中要使用--来表示双破折号。

通过使用这些命令,可以方便地列出子模块,并查看每个子模块所在的分支。这对于管理和跟踪子模块的开发非常有帮助。

0