假装我有回购A,它是子模块A.1 A.2。
如果我跑
git clone --recursive https://github.com/A/A.git .
它将克隆主存储库及其子模块。
但如果我跑:
git clone --recursive https://github.com/A/A1.git .
我无法运行任何可以处理主仓库和其他子模块的东西吗?
答案 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的结果。