2012-05-17 12 views
10

Ich habe eine private Repo auf Github, die 3 Submodule beherbergt, von denen alle 3 auch privat sind.Probleme mit Git-Submodulen, wenn Submodule privat sind Github Repos

Ich habe 4 SSH-Schlüssel auf meinem EC2-Server generiert und sie als Github-Deploy-Schlüssel auf alle 4 privaten Repositories angewendet.

Ich bin in der Lage, das primäre Repository zu klonen, da es den SSH-Schlüssel erkennt. Wenn ich "git submodule update" ausfühle, scheitert es an den privaten Repos mit dem folgenden Fehler:

Fehler: Repository nicht gefunden. fatal: Das Remote-Ende hängt unerwartet auf

Wenn ich diese privaten Repos manuell auschecken, funktioniert es, aber nicht, wenn Sie den Befehl git submodule verwenden. Irgendeine Idee? Wird dies nicht vollständig unterstützt?

Antwort

9

githubs Authentifizierung ist ein bisschen seltsam. Sie verwenden keine Benutzernamen; Sie schließen nur basierend auf dem öffentlichen Schlüssel, den Sie vorgestellt haben, welcher Benutzer Sie sind. Da Sie vier Deploy-Keys generiert haben, ist es eine Vermutung, welche von Ihrem Server verwendet wird, wenn er sich mit github verbindet - github akzeptiert diese und lehnt dann den Zugriff auf Repositories ab, für die dieser Schlüssel nicht registriert ist.

Daher ist die einfachste Lösung, einen einzigen Bereitstellungsschlüssel für alle Repositorys zu verwenden.

Wenn Sie jedoch nicht können Sie hacken mit SSH-Aliase hacken. Fügen Sie zu Ihrem Server ~/.ssh/config Strophen wie folgt aus:

Host repo-foo 
    HostName ssh.github.com 
    Port 443 
    User git 
    IdentityFile /path/to/my-ssh-key-file-for-foo 
    IdentitiesOnly yes 

Host repo-bar 
    HostName ssh.github.com 
    Port 443 
    User git 
    IdentityFile /path/to/my-ssh-key-file-for-bar 
    IdentitiesOnly yes 

Dann Ihre Submodule weisen auf repo-bar:username/bar.git und repo-foo:username/foo.git anstatt die [email protected]:... Formular.

Dies bewirkt, dass git und ssh jedes Repository als auf einem anderen Server lebend behandeln und eine explizite Identitätsdatei übergeben, so dass keine Verwirrung darüber besteht, welcher Schlüssel verwendet werden soll.

+1

Ja, ich denke, dass Deploy Keys einzigartig sind und ich sie nicht über mehrere Projekte hinweg verteilen kann. Ich werde sehen, was ich sonst noch tun kann, aber ich möchte hauptsächlich nur passwortlose Deploys. –

+1

Das ist nicht seltsam; es ist ziemlich Standard! Und die Standardlösung ist genau so, wie Sie es vorgeschlagen haben. – Ashe

+0

@Len, Standard wie es sein mag, es ist ziemlich merkwürdig. Github sollte ihre Sachen reparieren, damit derselbe Deploy-Schlüssel für mehrere Repos verwendet werden kann. – bdonlan

Verwandte Themen