如何知道存储库是否是子模块
how to know if repository is a submodule
假设我有 repo A,它是子模块 A.1 A.2。
如果我运行
git clone --recursive https://github.com/A/A.git .
它将克隆主存储库及其子模块。
但是如果我运行:
git clone --recursive https://github.com/A/A1.git .
我不能运行任何可以处理主仓库和其他子模块的东西?
您无法知道存储库是否是子模块。在其他地方用作子模块的每个存储库都是一个完整的独立存储库。它在其他一些存储库中用作子模块完全由该主存储库(或多个存储库)定义。您也可以将一个存储库用作任意数量的主存储库的子模块存储库。这就像问 "How do I know that package java.util.regex
is used by other packages" 或 "How do I know that log4j is used by other software as library".
我不知道是否有 100% 可靠的方法,因为每个子模块都是一个成熟的适当存储库。但是,您可以使用这样一个事实,即当您克隆带有子模块的存储库时,子模块文件夹将有一个 .git
文件,而不是具有 .git
的主(顶级)存储库文件夹。因此:
test -d .git; echo $?
如果您在子模块中, 将打印 1
,如果您在顶级仓库中,则将打印 0
。要使其也能在子文件夹中工作:
(cd `git rev-parse --show-toplevel` && test -d .git); echo $?
如果你在 shell 脚本中使用它,当然不需要 echo
return 值,你可以只使用 subshell直接。
假设我有 repo A,它是子模块 A.1 A.2。
如果我运行
git clone --recursive https://github.com/A/A.git .
它将克隆主存储库及其子模块。
但是如果我运行:
git clone --recursive https://github.com/A/A1.git .
我不能运行任何可以处理主仓库和其他子模块的东西?
您无法知道存储库是否是子模块。在其他地方用作子模块的每个存储库都是一个完整的独立存储库。它在其他一些存储库中用作子模块完全由该主存储库(或多个存储库)定义。您也可以将一个存储库用作任意数量的主存储库的子模块存储库。这就像问 "How do I know that package java.util.regex
is used by other packages" 或 "How do I know that log4j is used by other software as library".
我不知道是否有 100% 可靠的方法,因为每个子模块都是一个成熟的适当存储库。但是,您可以使用这样一个事实,即当您克隆带有子模块的存储库时,子模块文件夹将有一个 .git
文件,而不是具有 .git
的主(顶级)存储库文件夹。因此:
test -d .git; echo $?
如果您在子模块中, 将打印 1
,如果您在顶级仓库中,则将打印 0
。要使其也能在子文件夹中工作:
(cd `git rev-parse --show-toplevel` && test -d .git); echo $?
如果你在 shell 脚本中使用它,当然不需要 echo
return 值,你可以只使用 subshell直接。