Git / GitHub не может подтолкнуть к мастеру


151

Я новичок в Git / GitHub и столкнулся с проблемой. Я создал тестовый проект и добавил его в локальный репозиторий. Сейчас я пытаюсь добавить файлы / проект в удаленный репозиторий.

Вот что я сделал (и это сработало) -

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

Теперь, когда я пытаюсь отправить репозиторий в GitHub, используя следующую команду, я получаю следующую ошибку:

git push origin master

Ошибка -

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

Справочная ссылка ( help.github.com ) внизу всех страниц github. Помощь описывает многие темы, включая эту. Я бы предложил прочитать их, а затем задавать вопросы о конкретных вещах, которые вы не понимаете.
jamessan

21
если бы jamessan указывал на определенное место на страницах справки, это было бы более полезно.
Деономо

Ответы:


244

GitHub не поддерживает проталкивание протокола Git, на что указывает использование вами начала URL git://. Как говорится в сообщении об ошибке, если вы хотите отправить, вы должны использовать либо SSH URL, git@github.com:my_user_name/my_repo.gitлибо протокол «smart HTTP», используя https://URL, который GitHub показывает вам для вашего хранилища.

(Обновление: к моему удивлению, некоторые люди, по-видимому, подумали, что под этим я подразумевал, что «https» означает «умный HTTP», а я - нет. У Git раньше был протокол «тупой HTTP», который не позволял пушить раньше). был введен «умный HTTP», который использует GitHub - его можно было бы использовать как либо, так httpи https. Различия между протоколами передачи, используемыми Git, объяснены в ссылке ниже.)

Если вы хотите изменить URL-адрес источника, вы можете просто сделать:

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

или

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

Более подробная информация доступна в 10.6 Git Internals - Transfer Protocols .


Так что я изменил URL и повторил push, теперь получаю эту ошибку - ОШИБКА: my_user_name / my_repo.git не существует. Вы ввели это правильно? фатальный: удаленный конец неожиданно
зависает

Является ли заданный вами URL-адрес определенно тем, который вы можете скопировать и вставить со страницы своего хранилища на GitHub? (
Между

1
Итак, вам нужно создать репозиторий на GitHub, прежде чем вы сможете перейти к нему - когда вы это сделаете, он даст вам инструкции о том, как клонировать или отправить в репозиторий.
Марк Лонгэйр

1
У меня была такая же проблема. На самом деле проблема была в том, что у вас есть косая черта "/" прямо между github.com и вашим именем пользователя. И это должно быть двоеточие ":". Вот в чем проблема: D
Уилмер Э. Хенао

2
@WilmerEHenaoH: это могло быть вашей проблемой, но это не проблема в вопросе или в моем ответе;) (Просто для интереса, иногда возникает путаница по поводу двух стилей SSH URL в git , один из которых использует двоеточие для разделения имени хоста и пути, а другое - нет.)
Mark Longair

37

Используйте ответ Марка Лонгаира , но обязательно используйте ссылку HTTPS на хранилище:

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

Вы можете использовать тогда git push origin master.


1
Меня устраивает. Тогда просто введите git pushи работает.
youngzy

13

Использование решения Марка Лонгаира git remote set-url...совершенно очевидно. Вы также можете получить то же поведение, непосредственно редактируя этот раздел файла .git / config:

перед:

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

после:

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

(И наоборот, git remote set-url...вызов производит вышеуказанное изменение.)


2

Существует простое решение для кого-то нового в этом:

Отредактируйте файл конфигурации в вашем локальном каталоге .git ( config). Изменить git:на https:ниже.

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

1
Неправильно, протокол https не допустит нажатия. См. Книгу «Pro Git», раздел 4.1.4 «Протокол HTTP / S». Ссылка: git-scm.com/book/en/v2
Кевин Дж. Райс

@ KevinJ.Rice: хмм, где это говорит , что ? Github использует интеллектуальный протокол HTTP, и это прекрасно подходит для толчков .
Мартин Питерс

1

У меня возникла эта проблема после обновления клиента Git , и внезапно мой репозиторий не смог выдвинуть.

Я обнаружил, что какой-то старый пульт имел неправильное значение url , даже через мой активный в данный момент пульт имел такое же значение urlи работал нормально.

Но был также pushurl параметр, поэтому добавление его для старого пульта работало для меня:

Перед:

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

ПРИМЕЧАНИЕ. Эта часть файла config не использовалась целую вечность, но новый клиент пожаловался на неправильный URL:

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

Поэтому я добавил pushurlпараметр к старому пульту:

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

1

Эта ошибка возникает, когда вы клонируете репозиторий, используя такой вызов:

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

По сути, это означает, что вы являетесь пользователем, работающим только по запросу, который не может вносить изменения.

Я исправил это, открыв .git/configфайл моего репо и изменив строку:

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

чтобы:

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

Этот ssh+gitпротокол сgit пользователем является механизмом аутентификации, предпочитаемым Github.

Другие ответы, упомянутые здесь, технически работают, но все они, кажется, обходят ssh, требуя, чтобы вы вручную вводили пароль, который вы, вероятно, не хотите.



0

Я добавил свой pubkey на github.com, и это было успешно:

ssh -T git@github.com

Но я получил ошибку «Вы не можете нажать» после того, как ошибочно сделал это:

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

Вместо того, чтобы делать то, что я должен был сделать:

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

Чтобы установить httpsглобально вместо git://:

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


-1

Самый быстрый способ преодолеть это - заменить originего предложением.

Вместо этого git push origin masterиспользуйте:

git push git@github.com:my_user_name/my_repo.git master
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.