it-swarm.com.de

Git-Submodule und SSH-Zugriff

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?

37
midtiby

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.

34
Mark Longair

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
8
Ikke

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

4
chrisinmtown

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.

2
midtiby

Geben Sie den Benutzernamen nicht in die URL ein. git fragt Sie nach dem Benutzernamen und dem Kennwort, wenn Sie/pull/etc klonen

0
yano