Wie kann ich GitPython zusammen mit bestimmten SSH-Schlüsseln verwenden?GitPython und SSH-Schlüssel?
Die Dokumentation ist zu diesem Thema nicht sehr gründlich. Das einzige, was ich bisher probiert habe, ist Repo(path)
.
Wie kann ich GitPython zusammen mit bestimmten SSH-Schlüsseln verwenden?GitPython und SSH-Schlüssel?
Die Dokumentation ist zu diesem Thema nicht sehr gründlich. Das einzige, was ich bisher probiert habe, ist Repo(path)
.
Bitte beachten Sie, dass alle folgenden Funktionen nur in GitPython v0.3.6 oder neuer funktionieren.
Sie können die Umgebungsvariable GIT_SSH
verwenden, um eine ausführbare Datei für git bereitzustellen, die stattdessen ssh
aufruft. Auf diese Weise können Sie jede Art von SSH-Schlüssel verwenden, wenn git versucht, eine Verbindung herzustellen.
Dies funktioniert entweder per Anruf ein mit context manager ...
ssh_executable = os.path.join(rw_dir, 'my_ssh_executable.sh')
with repo.git.custom_environment(GIT_SSH=ssh_executable):
repo.remotes.origin.fetch()
... oder mehr beharrlich mit der set_environment(...)
Methode des Git
Objekt Ihrer Repository:
old_env = repo.git.update_environment(GIT_SSH=ssh_executable)
# If needed, restore the old environment later
repo.git.update_environment(**old_env)
Wie können Sie Legen Sie eine beliebige Menge an Umgebungsvariablen fest. Sie können diese verwenden, um Informationen an Ihr ssh-Skript weiterzugeben, damit es den gewünschten ssh-Schlüssel für Sie auswählen kann.
Weitere Informationen über die Entwicklung dieses Features (neu in GitPython v0.3.6) finden Sie unter in the respective issue.
Folge für mich auf gitpython == 2.1.1
import os
from git import Repo
from git import Git
git_ssh_identity_file = os.path.expanduser('~/.ssh/id_rsa')
git_ssh_cmd = 'ssh -i %s' % git_ssh_identity_file
with Git().custom_environment(GIT_SSH_COMMAND=git_ssh_cmd):
Repo.clone_from('[email protected]', '/path', branch='my-branch')
Was ist die Variable 'git' in diesem Beispiel? –
Du meinst git @? Das ist die Repo-URL, zum Beispiel [email protected]: django/django.git –
Die Zeile '' mit git.custom_environment (GIT_SSH_COMMAND = git_ssh_cmd): '' ... was ist ** git **? Es gibt keine Variable oder Import, die Git in Ihrem Code-Snippet definiert. –
zugeben müssen, gearbeitet, dass ich mit diesem als auch bin zu kämpfen. Ich würde lieber kein eigenes SSH-Skript schreiben. Gibt es eine Möglichkeit, nur den zu verwendenden Schlüssel zu identifizieren? Ich bin neu bei Python und das Tutorial/API bringt mich nicht ganz dahin, wo ich sein muss, damit das funktioniert. Vielen Dank. –
Stellt sich heraus, beginnend mit Git 2.3, das ist ziemlich eingebaut. Mit dem neuen GIT_SSH_COMMAND können Sie den Befehl ssh -i ... jetzt direkt angeben, anstatt sich auf ein externes Skript zu verlassen. – Byron
Danke. Das Folgende funktioniert nicht für mich. Was fehlt mir (Formatierung saugt Kommentare, aber hoffentlich kommst du auf die Idee)? 'mit git_project.git.custom_environment (GIT_SSH_COMMAND = 'ssh -i ~/.ssh/id_rsa [email protected]'): git_project.remotes.origin.push (git_project.heads.master)'. Wenn ich die Option "-T" hinzufüge und über die Befehlszeile ausführe, habe ich mich wie erwartet angemeldet. Formatierungsproblem in meinem Python-Code? –