2010-11-06 13 views
6

Sto cercando di usare le estensioni git e mi piace molto finora, ma non riesco a spingere su github. Il seguente comando funziona bene in git bash:Impossibile ottenere estensioni git per spingere qualcosa a github problemi SSH

git push "origin" master:master 

e poi quando spingo con le estensioni git ottengo questo:

C:\Program Files\Git\bin\git.exe push "origin" master:master 
Permission denied (publickey). 
fatal: The remote end hung up unexpectedly 

Done 

Nelle impostazioni git solo ha selezionato openSSH che vorrei tenere perché lo stucco sembra più seccante.

Gli addri remoti che ho aggiunto in gitextension, in realtà l'unica cosa che ho fatto bash solo per testare è il comando sopra e gerenating le chiavi SSH. Tutto il resto è impostato nelle estensioni git. Quindi suppongo che tutto debba essere impostato correttamente. Ad esempio, l'indirizzo email e nome siano corretti ...

ssh [email protected] 

collega anche bene, da bash

modificare:

così posso riprodurre l'errore mettendo il comando dal git- estensioni in cmd. Apparentemente c'è una differenza tra l'esecuzione da git bash e da cmd e git-extensions esegue questo comando come un comando di Windows ... qualche indizio?

aggiornamento: Se scelgo git-bash dal menu a git-extensions ottengo una finestra che è esattamente la stessa di quando mi fate clic destro in Esplora risorse sulla mia cartella repo e scelgo git bash qui. Ora, in quello aperto dall'esploratore, posso spingere e in quello aperto dalle estensioni ottengo il problema della chiave pubblica.

risposta

5

Ok, l'ho risolto.

Ho aperto il git bash dalle estensioni git e un git bash usando le estensioni shell explorer. Ho quindi eseguito ssh -vvv [email protected] da entrambi per vedere la differenza.

Si è scoperto perché ho cambiato la posizione del file di configurazione git (tendo a riformattare di tanto in tanto, quindi c: \ documenti e impostazioni ...è notoriamente pessimo per la memorizzazione di tutto ciò che potrei voler mantenere persistente), quando eseguito da git estensioni git stava anche cercando le chiavi ssh in una posizione diversa. Così ho aggiunto la cartella .ssh in cui è presente il mio file git cofig e ora funziona correttamente. Penso che git-extensions imposta la variabile HOME per git su qualunque cosa tu abbia impostato come percorso per il file di configurazione.

Ora, che non era ovvio ...

+0

Solo per rendere più chiaro l'uso di git.exe che penso sia ciò che le estensioni usano nei file di programma per il file .ssh usando sh.exe che cerca nella cartella degli utenti per i file di directory .ssh ... copia semplicemente anche i file all'interno di una cartella .ssh nell'altro – MarkKGreenway

+0

sono accaduti anche a me. Usando git bash dall'interfaccia utente di Git Extensions mi ha detto che git cercava le mie chiavi in ​​C: \ Users \ Me \ AppData \ Local \ Ixss \ home \ me \ .ssh, che è dove si trovavano le mie chiavi. Tuttavia, l'avvio dell'applicazione Git Bash dal menu di avvio mostrava che stava guardando C: \ Users \ Me \ .ssh.Per qualche ragione questo percorso è ciò che Git Extensions stava usando per push/pull/fetch/etc, anche se il suo git bash dice altrimenti – Daniel

1

Quando accendi git bash direttamente ti atterri nella cartella principale per MSYS. Devi assicurarti di avere la tua chiave ssh (id_rsa?) Nella sottocartella .ssh (relativa alla cartella home).

+0

che è dove è sì. Solitamente sparo ssh attraverso l'estensione shell explorer, così finisco immediatamente nel repository. Salva un sacco di digitazione. Alcuni nuovi sviluppi nel problema, controlla il mio aggiornamento sopra. – nus

6

cose da controllare:

  1. Presenza di HOME variabile di ambiente.
  2. Presenza di %HOME%\.ssh\ e chiavi RSA lì.

Quando si esegue git dal comando promt si preferisce correre git.cmd, perché risolve HOME automaticamente:

@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH% 
@if not exist "%HOME%" @set HOME=%USERPROFILE% 

Per risolvere gitextensions, definire HOME variabile e impostarla stesso valore USERPROFILE

+0

grazie per lo sforzo. Si scopre che la variabile home è stata effettivamente modificata oltre la mia consapevolezza. – nus

+0

Grazie, ho avuto un problema simile (permesso publickey negato) e l'impostazione della variabile HOME ha funzionato. – Bryan

1

Contento che ha risolto il problema. Dato che questo sembra un problema serio, mi interessa la differenza tra git-bash quando viene avviato da GitExtensions. In GitExtensions c'è un'impostazione che potrebbe risolvere questo problema. La directory% HOME% può essere modificata in GitExtensios. Per impostazione predefinita, verrà impostato su% HOMEDRIVE %% HOMEPATH%, ma puoi sovrascriverlo. Cambiare questo probabilmente risolve il tuo problema, dal momento che suggerisci che questo è il problema. Per cambiare questo apri la finestra di dialogo delle impostazioni e vai alla scheda "git". Nella sezione "Ambiente" puoi impostare il percorso% HOME%.

Lo apprezzerò se mi fai sapere se anche questo risolve il problema. Sono anche interessato a ciò che ha causato questo in primo luogo. Forse posso migliorare il controllo di una directory HOME valida.

+0

grazie per averlo esaminato! +1 Fondamentalmente, è esattamente quello che ho fatto, ma penso di essere stato confuso perché la mia intenzione iniziale era solo di cambiare la posizione del file di configurazione git. Il testo nella finestra di dialogo delle impostazioni per questa voce dice: "Il file di configurazione globale situato nella variabile di memoria dell'ambiente% HOME%." Successivamente ti consente di scegliere "Usa predefinito per HOME" o altro, che mi ha dato l'impressione che fosse relativo solo al file di configurazione. Penso che riscrivere quella frase potrebbe essere una buona idea. Causa di pensarci ora, probabilmente git usa solo questo file di configurazione se chiamato da estensioni ora ... – nus

+0

Come ho capito ora, git-extensions sovrascrive solo la variabile di ambiente di sistema% HOME% per git.exe, che non è quello che ho capito dal dialogo Nel mio caso, in realtà non è molto desiderabile, a meno che non sia coerente con l'estensione shell explorer. Quello che stavo cercando era di dire a Git di memorizzare le sue impostazioni in una posizione personalizzata. – nus

-1

Vedo che la variabile HOME è impostata su USERPROFILE nelle estensioni git. Posso aggiungere e commit ma non push/pull dal repository remoto. Non riesco a collegarmi a nessun repository remoto. Usiamo http (non ssh) per la connessione. Tuttavia, usando git bash sono in grado di connettermi al telecomando e fare push/pull. Ho inserito il mio numero GIT extensions does not connect to remote but git bash does ed è stato indirizzato a questo problema. Tuttavia, non sono in grado di risolvere il mio problema. Qualche idea?

2

La risposta corretta è quella di "max" (imposta manualmente il tuo env HOME), ma può aiutare qualcuno a capire perché il problema sta accadendo (dato che Git ottiene più utenti in tutto il mondo sarà molto comune).

Cygwin imposta $ HOME su/home/yourname, ma quella variabile non è nota nell'ambiente Windows. Quindi se apri una finestra bash e fai env | grep HOME vedrai tutte e tre le variabili 'HOME' qui menzionate, e potresti chiederti perché Gitextensions non usi il tuo cygwin HOME appropriato - perché il suo richiamo del file .bat non lo vede - vede solo ciò che vedi da fare 'set' in una console di windows.

È mistificante perché non esegue questa valutazione in un secondo momento e ottiene il corretto percorso cygwin poiché sa come invocare bash, ma (almeno nelle versioni fino a 2,41) è necessario eseguire questa modifica manuale nelle impostazioni o in .gitconfig.

1

Sì, non impostare la varible HOME era il problema anche per me.

Impostare la variabile HOME come %USERPROFILE% e rigenerare le chiavi private e pubbliche, quindi provare a clonare: dovrebbe funzionare ora.

Problemi correlati