Ich habe Probleme mit einem Git-Repository, das mehrere Submodule enthält.
Das Super-Git-Repository wurde mit den Befehlen erstellt
mkdir projectname
cd projectname
git init
git submodule add ssh://[email protected]/pathtorepos
Wenn ein anderer Benutzer ("anderer Benutzer") das Super-Repository klont, scheint alles zu klappen. Aber wenn es an der Zeit ist, auf das Submodul zuzugreifen
git submodule init
git submodule update
git versucht, das Submodul mit "myusername" anstelle von "otheruser" zu klonen.
Wie löse ich dieses Problem?
Wenn möglich, stellen Sie am besten sicher, dass die .gitmodules
-Datei eine URL für das Repository enthält, die von jedermann geklont werden kann, normalerweise entweder eine git://
- oder eine http://
-URL. Benutzer, die selbst über SSH-Zugriff verfügen, können nach dem Klonen in das Submodul wechseln und die URL in remote.Origin.url
so ändern, dass sie mit ihrem Benutzernamen auf eine SSH-URL verweist, z. B .:
cd my-submodule
git remote set-url Origin [email protected]:/pathtorepos
Der andere Benutzer sollte dies auch in der aktuellen Situation tun können. Update: Chris Johnsen weist im Folgenden darauf hin, dass es sinnvoll ist, eine SSH-URL in .gitmodules
zu verwenden, wenn Sie den Benutzernamen weglassen und alle Benutzer des Repository SSH-Zugriff haben oben, wenn es sich lokal und fern unterscheidet.
Beachten Sie, dass die URLs in .gitmodules
nur verwendet werden, wenn Initialisierung das Submodul ist. Durch die Initialisierung des Submoduls wird der Konfigurationswert submodule.<SUBMODULE-NAME>.url
im Hauptprojekt auf das festgelegt, was in .gitmodules
festgeschrieben ist. Dies ist der Wert, der bei der ersten Aktualisierung des Submoduls verwendet wird. Sie können zwischen dem Initialisieren und Aktualisieren des Submoduls auch diese URL ändern, die für die erste Aktualisierung verwendet wird, und zwar mit einem Befehl wie:
git config submodule.my-submodule.url [email protected]:/pathtorepos
In der Tat müssen Sie dies möglicherweise tun, wenn das erste Update fehlschlägt. Nachdem das Submodul zum ersten Mal aktualisiert wurde, ist die URL, die Sie ändern müssen, die für Origin
innerhalb des Submoduls definierte URL. Zu diesem Zeitpunkt ist es nur sinnvoll, den Wert submodule.my-submodule.url
config im Hauptprojekt festzulegen, wenn Sie wahrscheinlich löschen und Aktualisieren des Submoduls.
Der andere Benutzer muss die Datei .git/config
ändern, um den Benutzernamen in seinen eigenen Benutzernamen zu ändern. Auf diese Weise verwendet git den richtigen Benutzer, um eine Verbindung zum Server herzustellen.
[submodule "path/to/module"]
url = ssh://[email protected]/pathtorepos
Um dies in einem Open-Source-Projekt zu beheben, geben wir eine RELATIVE URL in die .gitmodules-Datei ein. Dies bewirkt, dass git die Submodul-URL basierend auf der URL klont, die vom URL-Muster des übergeordneten Projekts geklont wird. Durch die Verwendung eines relativen Pfads wird die Angabe des Protokolls (https, ssh) und des Benutzernamens vollständig vermieden:
[submodule "my/tests/schemas"]
path = my/tests/schemas
url = ../my-schema
p.s. Nach dem Posting wurde mir klar, dass meine Antwort ein Dupe ist. Hier ist die Quelle, die Sie verwenden sollten: Submodule automatisch über ssh oder https zugreifen
Nur als Referenz, die Lösung, die ich am Ende verwendet habe, ist die folgende ..__: Es ist tatsächlich möglich, dass andere das vorhandene Repository auschecken.
Wenn ich das Repository auschecken muss, kann das mit den Befehlen erledigt werden
git clone ssh://[email protected]/path/to/superrepos
cd superrepos
git submodule init
git submodule update
Für andere Benutzer, die das Super-Repository auschecken möchten, wird der folgende Befehlssatz verwendet: Der einzige Unterschied ist das manuelle Klonen des anderen Repositorys
git clone ssh://[email protected]/path/to/superrepos
cd superrepos
git clone ssh://[email protected]/path/to/other/repos
git submodule init
git submodule update
Beachten Sie, dass nach der Ausgabe der
git submodule init
kommando, git sagt Ihnen, dass das angeforderte Repository und das verfügbare Archiv nicht identisch sind. Dies ist jedoch nicht fatal und Sie können sicher fortfahren.
Geben Sie den Benutzernamen nicht in die URL ein. git fragt Sie nach dem Benutzernamen und dem Kennwort, wenn Sie/pull/etc klonen