Frage:
Gibt es eine Möglichkeit, Git-Submodule automatisch über dieselbe Methode (ssh oder https) wie das Haupt-Repository auszuchecken?
Hintergrund:
Wir haben ein nicht öffentliches Gitlab-Repository ( main
) mit einem Submodul ( utils
), das auch als nicht öffentliches Gitlab-Repository auf demselben Server gehostet wird. Auf diese Repositorys 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 unterschiedliche Authentifizierungsformen und je nach Client-Computer und Benutzer wird die eine oder andere bevorzugt.
Für das Repository der obersten Ebene ( main
) ist dies kein Problem, da jeder die von ihm bevorzugte Methode auswählen kann. Für das Submodul hängt dies jedoch von der .gitmodules
Datei ab und ist daher (anfangs) für alle gleich.
Anstatt dass jeder die .gitmodules-Datei an seine Vorlieben anpassen und sicherstellen muss, dass diese Änderungen nicht versehentlich übernommen werden, wäre es schön, wenn es eine Möglichkeit gäbe, nur den Server- und Repo-Pfad anzugeben, und git wählt entweder die Dieselbe Methode, die für das Haupt-Repo verwendet wird, oder etwas, das in gitconfig festgelegt werden kann.
quelle
git submodule foreach git submodule update
oder ähnliches. Ich habe keine Zeit, eine richtige Antwort zu schreiben, aber ich hoffe, das wird helfen.Antworten:
Ich habe dieses Problem endlich gelöst, indem ich die URL des Submoduls als relativen Pfad angegeben habe :
Nehmen wir also an, Ihr Haupt-Git-Repository ist erreichbar
https://gitlabserver.com/my/path/main.git
[email protected]:my/path/main.git
Und die
.gitmodules
Datei sieht so aus:Dies würde bedeuten, dass auch beim Auschecken der Hauptanwendung über ssh auf die Submodul-Utils über https zugegriffen wird.
Sie können den absoluten Pfad jedoch durch einen relativen Pfad wie den folgenden ersetzen:
und von nun an verwenden
git clone --recursive https://gitlabserver.com/my/path/main.git
git clone --recursive [email protected]:my/path/main.git
um die gesamte Repository-Struktur nach Belieben abzurufen. Offensichtlich funktioniert dies nicht in Fällen, in denen der relative ssh- und der https-Pfad nicht identisch sind, aber zumindest für von gitlab gehostete Repositorys ist dies der Fall.
Dies ist auch praktisch, wenn Sie (aus welchen Gründen auch immer) Ihre Repository-Struktur an zwei verschiedenen Remotestandorten spiegeln.
quelle
../../mob/module.git
in diesem Fall verwenden)..gitmodules
, war das Ausführen.git submodule sync
(Referenz; dhoeric.github.io/2017/https-to-ssh-in-gitmodules )Ich glaube, ich habe eine allgemeinere Antwort, aber sie ist nicht ganz automatisch. Sie können eine Konfigurationseinstellung anwenden
~/.gitconfig
, die eine bestimmte URL durch eine URL Ihrer Wahl ersetzt.Denn
Github
ich habe das in meinem~/.gitconfig
:Hier ist ein Repository mit einem Submodul, das mit einer HTTPS-URL deklariert ist, die ich mit HTTPS rekursiv klonen kann.
git clone --recursive https://github.com/p2/OAuth2.git
ODER
git clone --recursive [email protected]:p2/OAuth2.git
Informationen zur Verwendung finden Sie hier: https://git-scm.com/docs/git-config#Documentation/git-config.txt-urlltbasegtinsteadOf
Und hier: https://git-scm.com/docs/git-clone
quelle