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

时间:2016-12-13 12:27:18

标签: git git-submodules

假装我有回购A,它是子模块A.1 A.2。

如果我跑

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

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

但如果我跑:

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

我无法运行任何可以处理主仓库和其他子模块的东西吗?

2 个答案:

答案 0 :(得分:4)

您无法知道存储库是否是子模块。在其他地方用作子模块的每个存储库都是一个完整的独立存储库。它在一些其他存储库中用作子模块,纯粹由主存储库(或存储库)定义。您还可以将一个存储库用作任意数量的主存储库的子模块存储库。这就像问“我怎么知道其他包使用包java.util.regex”或“我怎么知道其他软件将log4j用作库”。

答案 1 :(得分:1)

我不知道是否有100%可靠的知道方式,因为每个子模块都是一个完全成熟的正确存储库。但是,您可以使用以下事实:当您使用子模块克隆存储库时,子模块文件夹将具有.git文件,而不是具有.git的主(顶级)存储库夹。就这样:

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

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

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

如果你在shell脚本中使用它,当然不需要echo返回值,你可以直接使用子shell的结果。

相关问题