2016-12-13 3 views
0

Tue ich vor, ich habe Repo A, und es ist Submodule A.1 A.2.wie zu wissen, ob das Repository ein Submodul ist

Wenn ich

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

ausführen Es wird das Haupt-Repository klonen und es ist Submodule.

Aber wenn ich laufe:

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

Ich kann nichts ausführen, die die Haupt-Repo- und andere Submodule umgehen kann?

Antwort

3

Sie können nicht wissen, ob ein Repository ein Submodul ist oder nicht. Jedes Repository, das als Submodul irgendwo anders verwendet wird, ist ein vollständiges eigenes Standalone-Repository. Dass es in einem anderen Repository als Submodul verwendet wird, ist ausschließlich durch dieses Master-Repository (oder Repositories) definiert. Sie können ein Repository auch als Submodul-Repository für eine beliebige Anzahl von Master-Repositories verwenden. Das ist wie die Frage "Woher weiß ich, dass das Paket java.util.regex von anderen Paketen verwendet wird" oder "Woher weiß ich, dass log4j von anderer Software als Bibliothek verwendet wird?".

1

Ich weiß nicht, ob es eine 100% zuverlässige Weise zu wissen gibt, da jedes Submodul ein vollwertiges richtiges Repository ist. Sie können jedoch die Tatsache verwenden, dass beim Replizieren eines Repos mit Submodulen die Submodulordner eine .git-Datei haben, im Gegensatz zum Haupt Repo (Top-Level), das über einen .git-Ordner verfügt. Als solche:

test -d .git; echo $? 

wird 1 drucken, wenn Sie in einem Modul sind und 0, wenn Sie in der Top-Level-Repo sind. Um es auch aus Unterordner arbeitet:

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

Wenn Sie mit dieser in einer Shell-Skript, gibt es keine Notwendigkeit, echo den Rückgabewert Natürlich könnte man nur das Ergebnis der Subshell direkt verwenden.

+0

Das war nicht die Frage, oder? OP fragte, ob Sie das Submodul-Repo eigenständig auschecken, wie Sie sagen, dass es als ein Submodul in einem anderen Repo verwendet wird und vielleicht sogar automatisch den Master-Repo und die anderen Subrepos-Geschwister bekommt, was einfach unmöglich ist. – Vampire

+1

@Vampire Ich bin nicht ganz klar, ob die Frage über das Scripting unter Berücksichtigung von Submodulen oder über das Auschecken eines Masters nach einem Submodul war. Wenn Ihre Interpretation richtig ist, dann ist das auch Ihre Antwort, also stimme ich das zu. – DUman

+0

Diese Befehle funktionieren nur, wenn Sie das oberste Repo heruntergeladen haben. Wenn Sie nur "subrepo" herunterladen, ist .git vorhanden –

Verwandte Themen