Git / GitHub não pode empurrar para dominar


151

Eu sou novo no Git / GitHub e tive um problema. Criei um projeto de teste e o adicionei ao repositório local. Agora estou tentando adicionar arquivos / projeto ao repositório remoto.

Aqui está o que eu fiz (e isso funcionou) -

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

Agora, quando tento enviar o repositório para o GitHub, usando o seguinte comando, recebo o seguinte erro -

git push origin master

Erro -

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

Há um link de ajuda ( help.github.com ) na parte inferior de todas as páginas do github. A ajuda descreve muitos tópicos, incluindo este. Sugiro que você os leia e faça perguntas sobre coisas específicas que você não entende.
jamessan

21
se jamessan tivesse apontado para um local específico nas páginas de ajuda, isso teria sido mais útil.
Deonomo

Respostas:


244

O GitHub não oferece suporte ao envio de protocolo Git, indicado pelo uso do início da URL git://. Como diz a mensagem de erro, se você deseja enviar por push, use o URL SSH git@github.com:my_user_name/my_repo.gitou o protocolo "HTTP inteligente" usando o https://URL que o GitHub mostra para o seu repositório.

(Atualização: para minha surpresa, algumas pessoas aparentemente pensaram que, com isso, eu estava sugerindo que "https" significa "HTTP inteligente", o que eu não era. O Git costumava ter um protocolo "burro de HTTP" que não permitia pressionar antes o "HTTP inteligente" usado pelo GitHub foi introduzido - pode ser usado por um httpou outro https. As diferenças entre os protocolos de transferência usados ​​pelo Git são explicadas no link abaixo.)

Se você quiser alterar o URL de origem, basta:

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

ou

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

Mais informações estão disponíveis em 10.6 Git Internals - Transfer Protocols .


Então, mudei a URL e tentei o push novamente, obtenha esse erro agora - ERRO: meu_usuário_nome / meu_repo.git não existe. Você o inseriu corretamente? fatal: O lado remoto desligou inesperadamente
kapso

O URL que você definiu definitivamente é aquele que você pode copiar e colar da página do seu repositório no GitHub? (É sensível a maiúsculas, aliás.)
Mark Longair

1
OK, bem, você precisa criar o repositório no GitHub antes de poder avançar para ele - quando fizer isso, ele fornecerá instruções sobre como clonar ou enviar para o repositório.
precisa saber é o seguinte

1
Eu apenas tive esse mesmo problema. Na verdade, o problema é que você tem uma barra "/" entre o github.com e seu nome de usuário. E deve ser dois pontos ":". Esse é o problema: D
Wilmer E. Henao

2
@ WilmerEHenaoH: esse pode ter sido o seu problema, mas não foi o problema na pergunta ou na minha resposta;) (Apenas por interesse, às vezes há confusão sobre os dois estilos de URL SSH no git , um dos quais usa dois pontos para hostname separado e caminho e o outro de que não faz).
Mark Longair

37

Use a resposta de Mark Longair , mas certifique-se de usar o link HTTPS para o repositório:

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

Você pode usar então git push origin master.


1
Funciona para mim. Então apenas digite git pushtambém funciona.
youngzy

13

A solução de Mark Longair git remote set-url...é bastante clara. Você também pode obter o mesmo comportamento editando diretamente esta seção do arquivo .git / config:

antes:

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

depois de:

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

(E, inversamente, a git remote set-url...invocação produz a alteração acima.)


2

Existe uma solução simples para isso, para alguém novo:

Edite o arquivo de configuração no diretório local .git ( config). Mude git:para https:abaixo.

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

1
O protocolo https incorreto não permitirá push. Veja: livro "Pro Git", seção 4.1.4 "Protocolo HTTP / S". Link: git-scm.com/book/en/v2
Kevin J. Rice

@ KevinJ.Rice: uhm, onde diz isso ? O Github usa o protocolo HTTP inteligente e isso permite que os pushs funcionem perfeitamente .
Martijn Pieters

1

Eu tive esse problema depois de atualizar o cliente Git e, de repente, meu repositório não pôde ser enviado.

Eu descobri que algum controle remoto antigo tinha o valor errado url, mesmo que o controle remoto ativo no momento tivesse o mesmo valor urle estivesse funcionando bem.

Mas também havia o pushurlparâmetro, portanto, adicioná-lo ao controle remoto antigo funcionou para mim:

Antes:

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

NOTA: Esta parte do arquivo "config" não foi usada por muito tempo, mas o novo cliente reclamou da URL incorreta:

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

Então eu adicionei o pushurlparâmetro ao controle remoto antigo:

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

1

Este erro ocorre quando você clona um repo usando uma chamada como:

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

Isso essencialmente o define como um usuário somente de recepção, que não pode enviar alterações.

Corrigi isso abrindo o .git/configarquivo do meu repositório e alterando a linha:

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

para:

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

Este ssh+gitprotocolo com o gitusuário é o mecanismo de autenticação preferido pelo Github.

As outras respostas mencionadas aqui tecnicamente funcionam, mas todas parecem ignorar o ssh, exigindo que você digite manualmente uma senha, o que provavelmente não deseja.



0

Adicionei meu pubkey ao github.com e isso foi bem-sucedido:

ssh -T git@github.com

Mas recebi o erro "Você não pode enviar" depois de fazer isso de maneira errada:

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

Em vez de fazer o que eu deveria ter feito:

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

Para definir httpsglobalmente em vez de git://:

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


-1

A maneira mais rápida de superar isso é substituir origin pela sugestão.

Em vez de git push origin master, use:

git push git@github.com:my_user_name/my_repo.git master
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.