Git / GitHub nie może pushować do mastera


151

Jestem nowy w Git / GitHub i napotkałem problem. Stworzyłem projekt testowy i dodałem go do lokalnego repozytorium. Teraz próbuję dodać pliki / projekt do zdalnego repozytorium.

Oto, co zrobiłem (i to zadziałało) -

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

Teraz, gdy próbuję przesłać repozytorium do GitHub, używając następującego polecenia, otrzymuję następujący błąd -

git push origin master

Błąd -

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

Na dole wszystkich stron github znajduje się link pomocy ( help.github.com ). W pomocy opisano wiele tematów, w tym ten. Sugerowałbym przeczytanie ich, a następnie zadawanie pytań o konkretne rzeczy, których nie rozumiesz.
jamessan

21
gdyby jamessan wskazał konkretne miejsce na stronach pomocy, byłoby to bardziej przydatne.
Deonomo,

Odpowiedzi:


244

GitHub nie obsługuje przekazywania przez protokół Git, na co wskazuje użycie początku adresu URL git://. Zgodnie z komunikatem o błędzie, jeśli chcesz wypychać, użyj adresu URL SSH git@github.com:my_user_name/my_repo.gitlub protokołu „inteligentnego HTTP”, używając https://adresu URL, który GitHub pokazuje dla Twojego repozytorium.

(Aktualizacja: ku mojemu zdziwieniu, niektórzy najwyraźniej myśleli, że przez to sugerowałem, że „https” oznacza „inteligentny HTTP”, którym nie było. Git miał kiedyś „głupi protokół HTTP”, który wcześniej nie pozwalał na push wprowadzono „inteligentny protokół HTTP”, z którego korzysta GitHub - można go używać zamiast httpalbo https. Różnice między protokołami przesyłania używanymi przez Git są wyjaśnione w poniższym łączu).

Jeśli chcesz zmienić adres URL pochodzenia, możesz po prostu zrobić:

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

lub

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

Więcej informacji można znaleźć w 10.6 Git Internals - Transfer Protocols .


Więc zmieniłem adres URL i ponowiłem wypychanie, otrzymuję teraz ten błąd - BŁĄD: my_user_name / my_repo.git nie istnieje. Czy wpisałeś to poprawnie? fatalny:
Odległy

Czy adres URL, który ustawiłeś, na pewno jest tym, który możesz skopiować i wkleić ze strony do swojego repozytorium na GitHub? (Nawiasem mówiąc,
rozróżniana jest wielkość liter

1
OK, musisz utworzyć repozytorium na GitHub, zanim będziesz mógł do niego wypchnąć - kiedy to zrobisz, otrzymasz instrukcje, jak sklonować lub wypchnąć do repozytorium.
Mark Longair,

1
Właśnie miałem ten sam problem. Właściwie problem polegał na tym, że pomiędzy github.com a Twoją nazwą użytkownika masz ukośnik „/”. Powinien to być dwukropek „:”. To jest problem: D
Wilmer E. Henao

2
@WilmerEHenaoH: to mógł być twój problem, ale to nie był problem w pytaniu ani w mojej odpowiedzi;) (Tak dla zainteresowania, czasami pojawia się zamieszanie co do dwóch stylów URL SSH w git , z których jeden używa dwukropek do oddzielenia nazwy hosta i ścieżki, a druga nie.)
Mark Longair

37

Użyj odpowiedzi Marka Longaira , ale pamiętaj, aby użyć łącza HTTPS do repozytorium:

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

Możesz wtedy użyć git push origin master.


1
Mi to pasuje. Wtedy po prostu wpisz git pushrównież działa.
youngzy

13

Rozwiązanie Mark Longair git remote set-url...jest dość jasne. Możesz również uzyskać to samo zachowanie, bezpośrednio edytując tę ​​sekcję pliku .git / config:

przed:

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

po:

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

(I odwrotnie, git remote set-url...wywołanie powoduje powyższą zmianę).


2

Jest na to proste rozwiązanie dla kogoś nowego:

Edytuj plik konfiguracyjny w lokalnym katalogu .git ( config). Zmiana git:do https:poniżej.

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

1
Nieprawidłowo, protokół https nie zezwala na wypychanie. Zobacz: książka „Pro Git”, sekcja 4.1.4 „Protokół HTTP / S”. Link: git-scm.com/book/en/v2
Kevin J. Rice

@ KevinJ.Rice: uhm, gdzie jest napisane , że ? Github używa protokołu HTTP i inteligentnej, która pozwala na popycha dobrze .
Martijn Pieters

1

Miałem ten problem po uaktualnieniu klienta Git i nagle moje repozytorium nie mogło przesłać.

Zauważyłem, że jakiś stary pilot miał niewłaściwą wartość url, nawet jeśli mój obecnie aktywny pilot miał tę samą wartość urli działał dobrze.

Ale był też pushurlparametr, więc dodanie go do starego pilota zadziałało:

Przed:

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

UWAGA: ta część pliku „config” była nieużywana przez wieki, ale nowy klient skarżył się na zły adres URL:

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

Dodałem więc pushurlparametr do starego pilota:

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

1

Ten błąd występuje, gdy klonujesz repozytorium za pomocą wywołania takiego jak:

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

To zasadniczo ustawia Cię jako użytkownika tylko do ściągania, który nie może wprowadzać zmian.

Naprawiłem to, otwierając .git/configplik mojego repozytorium i zmieniając wiersz:

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

do:

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

Ten ssh+gitprotokół zgit użytkownikiem jest mechanizmem uwierzytelniania preferowanym przez Github.

Inne wspomniane tutaj odpowiedzi technicznie działają, ale wszystkie wydają się omijać ssh, co wymaga ręcznego wprowadzenia hasła, którego prawdopodobnie nie chcesz.



0

Dodałem mój pubkey do github.com i to się udało:

ssh -T git@github.com

Ale po błędnym wykonaniu tej czynności pojawił się błąd „Nie możesz pchać”:

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

Zamiast robić to, co powinienem:

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

Aby ustawić httpsglobalnie zamiast git://:

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


-1

Najszybszym sposobem na przezwyciężenie tego jest zastąpienie originsugestią, którą daje.

Zamiast git push origin masterużywać:

git push git@github.com:my_user_name/my_repo.git master
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.