如何知道存储库是否是子模块

问题描述 投票:0回答:2

假设我有 repo A 及其子模块 A.1 和 A.2.

如果我跑

git clone --recursive https://github.com/A/A.git .

它将克隆主存储库及其子模块。

但是如果我跑:

git clone --recursive https://github.com/A/A1.git .

我不能运行任何可以处理主回购和其他子模块的东西吗?

git git-submodules
2个回答
4
投票

您无法知道存储库是否是子模块。在其他地方用作子模块的每个存储库都是一个完整的独立存储库。它在其他一些存储库中用作子模块完全由该主存储库(或多个存储库)定义。您也可以将一个存储库用作任意数量的主存储库的子模块存储库。这就像问“我怎么知道包

java.util.regex
被其他包使用”或“我怎么知道log4j被其他软件用作库”。


2
投票

我不知道是否有 100% 可靠的方法,因为每个子模块都是一个成熟的适当存储库。但是,您可以使用这样一个事实,即当您克隆带有子模块的存储库时,子模块文件夹将有一个

.git
文件,而不是具有
.git
文件夹的主(顶级)存储库。因此:

test -d .git; echo $?
如果您在子模块中,

将打印

1
;如果您在顶级仓库中,则打印
0
。为了使其也可以在子文件夹中工作:

(cd `git rev-parse --show-toplevel` && test -d .git); echo $?

如果你在 shell 脚本中使用它,则不需要

echo
当然,你可以直接使用子 shell 的结果。

© www.soinside.com 2019 - 2024. All rights reserved.