Scrivere questo per coloro che hanno appena iniziato a utilizzare Git e BitBucket su Windows e che non hanno familiarità con Bash (poiché si tratta sia di un problema comune che di un risultato Google di alto livello durante la ricerca del messaggio di errore all'interno della domanda).
Per coloro a cui non importa HTTPS e che sono alla ricerca di una soluzione rapida, scorrere fino alla fine di questa risposta per le istruzioni in FOR THE LAZY
Per coloro che desiderano risolvere il problema reale, seguire le istruzioni seguenti:
Risolvere il problema SSH il più velocemente possibile
Questo è un insieme di istruzioni derivate dall'URL collegato da VonC. È stato modificato per essere il più resistente e succinto possibile.
Imposta le tue informazioni globali se non hai già:
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
Verifica OpenSSH:
$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...
Vedi qualcosa del genere?
- Sì: continua.
- No: passa alla sezione FOR THE LAZY o segui l'articolo collegato da VonC.
Vedi se hai già generato le chiavi:
$ ls -a ~/.ssh/id_*
Se sono presenti due file, è possibile saltare il passaggio successivo.
$ ssh-keygen
Lasciare tutto come predefinito, inserire una passphrase. Ora dovresti vedere i risultati con questo comando:
$ ls -a ~/.ssh/id_*
Verifica la presenza di un file di configurazione esistente:
$ ls -a ~/.ssh/config
Se ottieni un risultato, controlla questo file per informazioni errate. Se non esiste alcun file, attenersi alla seguente procedura:
$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
Conferma il contenuto:
$ cat ~/.ssh/config
Host bitbucket.org
IdentityFile ~/.ssh/id_rsa
- È richiesto lo spazio singolo prima di "IdentityFile".
Verifica di avviare l'agente SSH ogni volta che esegui GitBash:
$ cat ~/.bashrc
- Se vedi una funzione chiamata
start_agent
, questo passaggio è già stato completato.
- Se nessun file, continua.
- Se esiste un file che non contiene questa funzione, ci si trova in una situazione difficile. Probabilmente è sicuro aggiungerlo (usando le istruzioni qui sotto) ma potrebbe non esserlo! Se non sei sicuro, esegui un backup del tuo .bashrc prima di seguire le istruzioni riportate di seguito o passa alla sezione FOR THE LAZY .
Immettere quanto segue in GitBash per creare il file .bashrc:
$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo " echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo " # spawn ssh-agent" >> ~/.bashrc
$ echo " /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " echo succeeded" >> ~/.bashrc
$ echo " chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo " }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc
Verifica che il file sia stato creato correttamente (il tuo dovrebbe differire solo dove appare il "tuo nome utente"):
$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
- Chiudi GitBash e riaprilo.
- Dovresti ricevere la passphrase (per il file SSH generato in precedenza).
- Se nessun prompt, o non hai impostato una passphrase o GitBash non esegue lo script .bashrc (il che sarebbe strano, quindi considera di rivederne il contenuto!). Se lo stai eseguendo su un Mac (OS X),
.bashrc
non viene eseguito per impostazione predefinita .bash_profile
. Per risolvere questo problema, inserisci questo snippet nel tuo .bash_profile
:[[ -s ~/.bashrc ]] && source ~/.bashrc
Se non avessi inserito una passphrase, avresti visto qualcosa di simile all'avvio di GitBash:
Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)
E quanto segue dovrebbe restituire risultati:
$ ssh-add -l
Tuttavia, se si ottiene quanto segue da ssh-add -l
:
Could not open a connection to your authentication agent.
Non ha generato l'agente SSH e il tuo .bashrc è probabilmente la causa.
Se, all'avvio di GitBash, vedi questo:
Initializing new SSH agent...
sh.exe": : No such file or directory
Ciò significa che hai dimenticato di sfuggire a $ con un \ durante l'eco al file (cioè le variabili sono state espanse). Ricrea il tuo .bashrc per risolverlo.
Verifica che l'agente sia in esecuzione e che le tue chiavi siano state aggiunte:
$ ssh-add -l
Dovrebbe restituire qualcosa di simile a questo:
2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)
Eseguire il comando seguente per ottenere la chiave pubblica:
$ cat ~/.ssh/id_rsa.pub
(dovrebbe restituire qualcosa che inizia con "ssh-rsa ......"
- Fai clic sull'icona della finestra di GitBash
- Fai clic su Modifica
- Fai clic su Segna
- Evidenzia la chiave pubblica usando il mouse (incluso il
ssh-rsa
bit iniziale e il == youremail@yourdomain.com
bit finale )
- Fare clic con il tasto destro del mouse sulla finestra (esegue una copia)
- Incolla la tua chiave pubblica in Blocco note.
- Elimina tutte le nuove righe in modo che sia solo una singola riga.
- Premere
CTRL+A
quindi CTRL+C
per copiare nuovamente la chiave pubblica negli Appunti.
Configura la tua chiave privata con BitBucket procedendo come segue:
- Apri il tuo browser e vai al sito BitBucket.org
- Accedi a BitBucket.org
- Fai clic sul tuo avatar (in alto a destra)
- Fai clic su Gestisci account
- Fai clic su Chiavi SSH (sotto Sicurezza nel menu a sinistra)
- Fai clic su Aggiungi chiave
- Inserisci
Global Public Key
per l'etichetta
- Incolla la chiave pubblica che hai copiato dal Blocco note
Una Global Public Key
voce dovrebbe ora essere visibile nel tuo elenco di chiavi.
- Ritorna a GitBash
- cd nella directory contenente il tuo progetto
- Cambia la tua origine con la variazione SSH (non lo sarà se hai eseguito i passaggi FOR THE LAZY )
Controlla i telecomandi:
$ git remote -v
Passa all'URL SSH:
$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git
Verifica che le cose funzionino:
$ git remote show origin
Dovresti vedere qualcosa del genere:
Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
Fetch URL: git@bitbucket.org:youruser/yourproject.git
Push URL: git@bitbucket.org:youruser/yourproject.git
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
FATTO!
Puoi scegliere di utilizzare HTTPS anziché SSH. Sarà necessario digitare la password durante le operazioni remote (viene temporaneamente memorizzata nella cache dopo averla digitata una volta). Ecco come è possibile configurare HTTPS:
PER I PIGATI
Dovresti risolvere il problema SSH come descritto da VonC; tuttavia, se hai fretta di impegnarti e non hai gli strumenti / il tempo / le conoscenze per generare una nuova chiave pubblica in questo momento , imposta la tua origine sull'alternativa HTTPS:
> https://accountname@bitbucket.org/accountname/reponame.git
Utilizzo di uno strumento GUI come TortoiseGit o strumenti da riga di comando .
Ecco la documentazione di questo URL di origine alternativo.
Riga di comando per aggiungere un'origine se non esiste:
git remote add origin https://accountname@bitbucket.org/accountname/reponame.git
Riga di comando per modificare un'origine esistente:
git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git
NOTA: il nome del tuo account non è la tua email.
Potresti anche voler impostare le tue informazioni globali:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
Quindi riprovare a premere (non è necessario impegnarsi nuovamente)
git push origin master