Come posso utilizzare GitPython insieme a chiavi SSH specifiche?Chiavi GitPython e SSH?
La documentazione non è molto approfondita su questo argomento. L'unica cosa che ho provato finora è Repo(path)
.
Come posso utilizzare GitPython insieme a chiavi SSH specifiche?Chiavi GitPython e SSH?
La documentazione non è molto approfondita su questo argomento. L'unica cosa che ho provato finora è Repo(path)
.
Si noti che quanto segue funzionerà solo in GitPython v0.3.6 o successivo.
È possibile utilizzare la variabile di ambiente GIT_SSH
per fornire un eseguibile a git che chiamerà ssh
al suo posto. In questo modo, puoi usare qualsiasi tipo di chiave ssh ogni volta che git prova a connettersi.
Questo funziona sia per chiamata utilizzando un 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()
... o più persistente utilizzando il metodo del Git
oggetto del repository set_environment(...)
:
old_env = repo.git.update_environment(GIT_SSH=ssh_executable)
# If needed, restore the old environment later
repo.git.update_environment(**old_env)
come si può imposta qualsiasi quantità di variabili d'ambiente, puoi usarne alcune per passare informazioni al tuo ssh-script per aiutarlo a scegliere la chiave ssh desiderata per te.
Ulteriori informazioni sul divenire di questa funzione (novità in GitPython v0.3.6) si trova in the respective issue.
In seguito ha lavorato per me su 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')
Qual è la variabile 'git' in questo esempio? –
Vuoi dire git @? Questo è l'URL del repo, ad esempio [email protected]: django/django.git –
La riga '' con git.custom_environment (GIT_SSH_COMMAND = git_ssh_cmd): '' ... cosa è ** git **? Non esiste alcuna variabile o importazione che definisca git nel tuo snippet di codice. –
devo ammettere che sto lottando con questo. Preferisco davvero non scrivere uno script SSH personalizzato. C'è un modo per identificare la chiave da usare? Sono new-ish per Python e il tutorial/API non mi sta proprio prendendo dove devo essere per farlo funzionare. Grazie. –
Risulta, a partire da git 2.3, questo è praticamente integrato. Usando il nuovo GIT_SSH_COMMAND, puoi specificare direttamente il comando ssh -i ..., invece di fare affidamento su uno script esterno. – Byron
Grazie. Quanto segue non funziona per me. Cosa mi manca (la formattazione fa schifo nei commenti, ma si spera che tu ne abbia l'idea)? 'con git_project.git.custom_environment (GIT_SSH_COMMAND = 'ssh -i ~/.ssh/id_rsa [email protected]'): git_project.remotes.origin.push (git_project.heads.master)'. Se aggiungo l'opzione '-T' ed eseguo dalla riga di comando, ho effettuato l'accesso come previsto. Problema di formattazione nel mio codice Python? –