Git / GitHub non può spingere verso il master


151

Sono nuovo di Git / GitHub e ho riscontrato un problema. Ho creato un progetto di test e l'ho aggiunto al repository locale. Ora sto cercando di aggiungere file / progetti al repository remoto.

Ecco cosa ho fatto (e questo ha funzionato) -

git remote add origin git://github.com/my_user_name/my_repo.git

Ora quando provo a inviare il repository a GitHub, usando il seguente comando, ottengo il seguente errore -

git push origin master

Errore -

fatal: remote error:
You can't push to git://github.com/my_user_name/my_repo.git
Use git@github.com:my_user_name/my_repo.git

C'è un link di aiuto ( help.github.com ) in fondo a tutte le pagine di github. L'aiuto descrive molti argomenti tra cui questo. Suggerirei di leggere quelli e poi porre domande su cose specifiche che non capisci.
Jamessan,

21
se jamessan avesse indicato una posizione specifica nelle pagine della guida, sarebbe stato più utile.
Deonomo,

Risposte:


244

GitHub non supporta l'invio del protocollo Git, indicato dall'uso dell'URL all'inizio git://. Come dice il messaggio di errore, se vuoi spingere, dovresti usare l'URL SSH git@github.com:my_user_name/my_repo.gito il protocollo "smart HTTP" usando l' https://URL che GitHub ti mostra per il tuo repository.

(Aggiornamento: con mia sorpresa, alcune persone apparentemente pensavano che con questo stavo suggerendo che "https" significa "HTTP intelligente", cosa che non ero. Git aveva un protocollo "HTTP stupido" che non permetteva di eseguire il push prima è stato introdotto lo "smart HTTP" utilizzato da GitHub, che può essere utilizzato su entrambi httpo https. Le differenze tra i protocolli di trasferimento utilizzati da Git sono spiegate nel link seguente.)

Se vuoi cambiare l'URL di origine, puoi semplicemente fare:

git remote set-url origin git@github.com:my_user_name/my_repo.git

o

git remote set-url origin https://github.com/my_user_name/my_repo.git

Maggiori informazioni sono disponibili in 10.6 Git Internals - Protocolli di trasferimento .


Quindi ho cambiato l'URL e ho riprovato a premere, ora ho questo errore - ERRORE: my_user_name / my_repo.git non esiste. L'hai inserito correttamente? fatale: l'estremità remota ha riattaccato inaspettatamente
kapso

L'URL che hai impostato è sicuramente quello che puoi copiare e incollare dalla pagina per il tuo repository su GitHub? (Per inciso,
distingue tra

1
OK, bene devi creare il repository su GitHub prima di poterlo spingere - quando lo fai, ti darà le istruzioni su come clonare o spingere nel repository.
Mark Longair,

1
Ho appena avuto questo stesso problema. In realtà il problema era che hai una barra "/" tra github.com e il tuo nome utente. E dovrebbe essere un due punti ":". Questo è il problema: D
Wilmer E. Henao,

2
@WilmerEHenaoH: quello potrebbe essere stato il tuo problema, ma non era il problema nella domanda o con nella mia risposta;) (Solo per interesse, a volte c'è confusione sui due stili di URL SSH in git , uno dei quali utilizza due punti per separare nome host e percorso e l'altro dei quali no.)
Mark Longair,

37

Utilizzare la risposta di Mark Longair , ma assicurarsi di utilizzare il collegamento HTTPS al repository:

git remote set-url origin https://github.com/my_user_name/my_repo.git

Puoi usare allora git push origin master.


1
Per me funziona. Poi basta digitare git pushanche opere.
Youngzy

13

L'uso della soluzione di Mark Longair git remote set-url...è abbastanza chiaro. Puoi anche ottenere lo stesso comportamento modificando direttamente questa sezione del file .git / config:

prima:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git://github.com/my_user_name/my_repo.git

dopo:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:my_user_name/my_repo.git

(E viceversa, l' git remote set-url...invocazione produce la modifica sopra.)


2

C'è una soluzione semplice per questo per qualcuno di nuovo a questo:

Modifica il file di configurazione nella tua directory .git locale ( config). Passa git:al https:seguito.

[remote "origin"]
    url = https://github.com/your_username/your_repo

1
Il protocollo https non corretto non consente push. Vedi: libro "Pro Git", sezione 4.1.4 "Protocollo HTTP / S". Link: git-scm.com/book/en/v2
Kevin J. Rice,

@ KevinJ.Rice: uhm, dove fa dire che ? Github utilizza il protocollo HTTP intelligente e che permette di spinte più che bene .
Martijn Pieters

1

Ho avuto questo problema dopo aver aggiornato il client Git e all'improvviso il mio repository non è riuscito a spingere.

Ho scoperto che alcuni vecchi telecomandi avevano il valore sbagliato di url, anche se il mio telecomando attualmente attivo aveva lo stesso valore urle funzionava bene.

Ma c'era anche il pushurlparametro, quindi aggiungerlo per il vecchio telecomando ha funzionato per me:

Prima:

[remote "origin"]
    url = git://github.com/user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    pushurl = git@github.com:user/repo.git

NOTA: questa parte del file "config" non è stata utilizzata per anni, ma il nuovo client si è lamentato dell'URL errato:

[remote "composer"]
    url = git://github.com/user/repo.git
    fetch = +refs/heads/*:refs/remotes/composer/*

Quindi ho aggiunto il pushurlparametro al vecchio telecomando:

[remote "composer"]
    url = git://github.com/user/repo.git
    fetch = +refs/heads/*:refs/remotes/composer/*
    pushurl = git@github.com:user/repo.git

1

Questo errore si verifica quando si clona un repository utilizzando una chiamata come:

git clone git://github.com/....git

Questo in sostanza ti configura come un utente solo pull, che non può eseguire il push up delle modifiche.

Ho risolto questo problema aprendo il .git/configfile del mio repository e cambiando la riga:

[remote "origin"]
    url = git://github.com/myusername/myrepo.git

per:

[remote "origin"]
    url = ssh+git://git@github.com/myusername/myrepo.git

Questo ssh+gitprotocollo con l' gitutente è il meccanismo di autenticazione preferito da Github.

Le altre risposte menzionate qui funzionano tecnicamente, ma tutte sembrano bypassare ssh, richiedendo di inserire manualmente una password, che probabilmente non si desidera.



0

Ho aggiunto il mio pubkey a github.com e questo ha avuto successo:

ssh -T git@github.com

Ma ho ricevuto l'errore "Impossibile inviare" dopo aver erroneamente fatto questo:

git clone git://github.com/mygithubacct/dotfiles.git
git remote add origin git@github.com:mygithubacct/dotfiles.git
...edit/add/commit
git push origin master

Invece di fare quello che avrei dovuto fare:

mkdir dotfiles
cd dotfiles
git init
git remote add origin git@github.com:mygithubacct/dotfiles.git
git pull origin master
...edit/add/commit
git push origin master

0

Per impostare a httpslivello globale anziché git://:

git config --global url.https://github.com/.insteadOf git://github.com/

0

I cmnd seguenti risolveranno il problema.

 git pull --rebase
 git push

-1

Il modo più veloce per superare è quello di sostituire origincon il suggerimento che dà.

Invece di git push origin master, utilizzare:

git push git@github.com:my_user_name/my_repo.git master
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.