Frage:
Gibt es eine Möglichkeit, git Submodule über dieselbe Methode (ssh oder https) als Haupt-Repository automatisch auszuprobieren?
Hintergrund:
Wir haben ein nicht-öffentliches gitlab-Repository ( main
), das ein Submodul ( utils
) hat, das auch als nicht-öffentliches gitlab-Repository auf demselben Server gehostet wird. Auf diese Repositories kann entweder über ssh oder https zugegriffen werden:
[email protected]:my/path/repo.git
https://gitlabserver.com/my/path/repo.git
Beide Varianten erfordern offensichtlich verschiedene Formen der Authentifizierung und abhängig vom Client-Computer und dem Benutzer wird das eine oder andere bevorzugt.
Für das Top-Level-Repository ( main
) ist das kein Problem, da jeder die Methode wählen kann, die er bevorzugt, aber für das Untermodul hängt dies von der .gitmodules
-Datei ab und ist daher (zunächst) die für alle gleich.
Jetzt, anstatt dass jeder die .gitmodules-Datei an das anpassen muss, was sie bevorzugen und sicherstellen, dass sie diese Änderungen nicht versehentlich festschreibt, wäre es nett, wenn es einen Weg gäbe, den Server und den Repo-Pfad zu spezifizieren dieselbe Methode, die für das Hauptrepo verwendet wird, oder etwas, das in gitconfig eingestellt werden kann.
Ich habe dieses Problem endlich gelöst, indem ich die Submodul-URL als relativen Pfad angegeben habe :
Sagen wir also, Ihr Haupt-Git-Repository ist erreichbar
https://gitlabserver.com/my/path/main.git
[email protected]:my/path/main.git
Und die Datei .gitmodules
sieht folgendermaßen aus:
Das würde bedeuten, dass selbst wenn Sie die Hauptanwendung über ssh auschecken, die Submodul-Utils immer noch über https erreichbar wären.
Sie können jedoch den absoluten Pfad durch einen relativen wie folgt ersetzen:
%Vor%und ab jetzt
git clone --recursive https://gitlabserver.com/my/path/main.git
git clone --recursive [email protected]:my/path/main.git
um die gesamte Repository-Struktur zu erhalten, wie immer Sie wollen. Offensichtlich funktioniert das nicht in Fällen, in denen die relativen SSH- und HTTPS-Pfade nicht identisch sind, aber zumindest für Gitlab-gehostete Repositories ist dies der Fall.
Dies ist auch praktisch, wenn Sie (aus welchen Gründen auch immer) Ihre Repository-Struktur an zwei verschiedenen Remote-Standorten spiegeln.
Tags und Links git git-submodules gitlab