Почему Github запрашивает имя пользователя / пароль, следуя инструкциям на экране и выдвигая новое хранилище?

298

Я являюсь владельцем организации на github, только что создал репозиторий и попытался выдвинуть, но я сталкиваюсь с проблемой, когда он запрашивает у меня имя пользователя, хотя я могу нормально использовать SSH:

$ ssh -T git@github.com
Hi Celc! You've successfully authenticated, but GitHub does not provide shell access.
$ git add .
$ git commit -m 'first commit'
[master (root-commit) 3f1b963] first commit
 6 files changed, 59 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 main.js
 create mode 100644 package.json
 create mode 100644 readme.markdown
 create mode 100644 views/index.ejs
 create mode 100644 views/layout.ejs
$ git remote add origin https://github.com/WEMP/project-slideshow.git
$ git push -u origin master
Username for 'https://github.com':

Что я делаю не так? Это никогда не случалось со мной раньше, но недавно я также обновился до git 1.7.10.3.

Кит Сунде
источник

Ответы:

662

Не используйте HTTP вместо SSH

изменение

https://github.com/WEMP/project-slideshow.git 

в

git@github.com:WEMP/project-slideshow.git

вы можете сделать это в .git/configфайле

Хьюго
источник
1
Спасибо! Я только что понял это после прочтения stackoverflow.com/a/10126412/29347 , я не думаю, что github обычно дает мне удаленный репозиторий как HTTPS, что вызывает некоторую путаницу.
Кит Сунде
2
Вы можете изменить эту опцию, нажав на кнопку, куда вы копируете свой URL клона.
Дерек Адэйр
Для MacOS. Проблема при обновлении до последних макосов. stackoverflow.com/a/39616339/1445102
носорог
12
Вы также можете сделать это git remote set-url origin git@github.com:user/repo.git, как подробно описано в stackoverflow.com/questions/10126381/…
И, наконец,
54

У меня была такая же проблема, и я удивился, почему этого не произошло с репозиторием с битбакетом, который был клонирован с https Посмотрев немного, я обнаружил, что в конфигурации для репозитория BB есть URL-адрес, содержащий мое имя пользователя. Таким образом, я вручную отредактировал конфигурацию для моего репозитория GH, как и вуаля, больше не нужно вводить имя пользователя. Я на Windows.

Редактировать your_repo_dir/.git/config(помните: .gitпапка скрыта)

Изменить:

https://github.com/WEMP/project-slideshow.git

чтобы:

https://*username*@github.com/WEMP/project-slideshow.git

Сохраните файл. Сделайте, git pullчтобы проверить это.

Правильный способ сделать это, вероятно, с помощью команд git bash для редактирования настроек, но редактирование файла напрямую не представлялось проблемой.

Шон
источник
Это хороший момент, если вы включите имя пользователя, оно будет обрабатываться цепочкой ключей ОС (по крайней мере, так должно быть в OSX и, видимо, в Windows). Нет никакой разницы между редактированием файла с помощью блокнота или с помощью vim / emacs / nano / vi, я бы не стал так сильно беспокоиться о техническом снобизме, это просто обычный текстовый файл.
Кит Сунде
20

Вот официальный ответ на это:

Если Git запрашивает у вас имя пользователя и пароль каждый раз, когда вы пытаетесь взаимодействовать с GitHub, вы, вероятно, используете URL-адрес клонирования HTTPS для своего хранилища.

Использование удаленного URL-адреса HTTPS имеет ряд преимуществ: его проще настроить, чем SSH, и обычно он работает через строгие брандмауэры и прокси-серверы. Тем не менее, он также предлагает вам вводить учетные данные GitHub каждый раз, когда вы извлекаете или перемещаете хранилище.

Вы можете настроить Git для хранения вашего пароля. Если вы хотите это настроить, прочитайте все о настройке кэширования паролей .

Каталин Хриту
источник
1
Спасибо. Я бы поспорил с Github, что это не так легко настроить, если вы окажетесь здесь (:
ecoologic
Это ответ на вопрос, потому что вопрос задать, ПОЧЕМУ ?
Eli
14

Улучшение ответа @ Ianl ,

Похоже, что если включена двухэтапная аутентификация, вместо пароля нужно использовать токен. Вы можете сгенерировать токен здесь .

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

git remote set-url origin https://username:password@github.com/WEMP/project-slideshow.git

Обратите внимание, что URL имеет как имя пользователя, так и пароль. Также .git/configфайл должен показывать ваши текущие настройки.


Обновление 20200128:

Если вы не хотите хранить пароль в файле конфигурации, вы можете сгенерировать свой личный токен и заменить пароль токеном. Вот некоторые подробности .

Это будет выглядеть так -

git remote set-url origin https://username:token@github.com/WEMP/project-slideshow.git
Kaushal
источник
Это безопасно? Может кто-то просто получить доступ к этой информации с моего компьютера?
Akaisteph7
Да, они могут получить доступ с вашего компьютера, так как они хранятся в виде простого текста в .git/configфайле
Каушал
11

дополнительная заметка:

если вы уже добавили удаленный ($ git remote add origin ...) и хотите изменить этот конкретный удаленный сервер, сначала выполните удаленное удаление ($ git remote rm origin), прежде чем повторно добавлять новый и улучшенный URL-адрес хранилища (где «происхождение» было названием для удаленного репо).

Итак, чтобы использовать оригинальный пример:

$ git remote add origin https://github.com/WEMP/project-slideshow.git
$ git remote rm origin
$ git remote add origin https://github-username@github.com/WEMP/project-slideshow.git
Яни
источник
4
Вам не нужно удалять пульт. Вы можете просто изменить URL:git remote set-url origin https://github-username@github.com/WEMP/project-slideshow.git
shovavnik
8

Если вы используете HTTPS, убедитесь, что ваш URL правильный. Например:

$ git clone https://github.com/wellle/targets.git
Cloning into 'targets'...
Username for 'https://github.com': ^C

$ git clone https://github.com/wellle/targets.vim.git
Cloning into 'targets.vim'...
remote: Counting objects: 2182, done.
remote: Total 2182 (delta 0), reused 0 (delta 0), pack-reused 2182
Receiving objects: 100% (2182/2182), 595.77 KiB | 0 bytes/s, done.
Resolving deltas: 100% (1044/1044), done.
платный ботаник
источник
1
Это отличный момент! Если у вас есть опечатка в URL, вам будет предложено ввести «Имя пользователя» вместо того, чтобы сообщить, что хранилище не существует.
Дмитрий
5

Я только что получил электронное письмо от администратора github.com, в котором говорилось следующее: «Обычно мы советуем людям использовать URL-адрес HTTPS, если у них нет особых причин использовать протокол SSH. HTTPS безопасен и проще в настройке, поэтому мы по умолчанию это при создании нового хранилища. "

Запрос пароля действительно принимает обычные данные для входа на github.com. Учебное пособие по настройке кэширования паролей можно найти по адресу https://help.github.com/articles/set-up-git#password-caching . Я следовал инструкциям в учебнике, и это сработало для меня.

Jochen
источник
1
URL был обновлен: help.github.com/articles/caching-your-github-password-in-git
MarkHu
4

Потому что вы используете HTTPS способ. HTTPS требует, чтобы вы вводили доступ к своей учетной записи каждый раз, когда пытаетесь выдвинуть или потянуть , но есть и один способ, называемый SSH , и он позволяет вам сказать git, что я даю вам разрешение с моей учетной записью для этого компьютера, и никогда не спрашивать Я снова о любом доступе пользователя . Чтобы использовать его, вам нужно сгенерировать ключ SSH и добавить его в свой аккаунт Github только один раз. Для этого вы можете выполнить следующие шаги

Как сгенерировать ключ SSH для Github

Азарапет Туанян
источник
4

Если вы включили двухфакторную аутентификацию, вам нужно сгенерировать личный токен доступа и использовать его вместо обычного пароля. Более подробная информация здесь: https://help.github.com/articles/creating-an-access-token-for-command-line-use/

Нил
источник
Нил Я считаю, что это полезная информация, но я сомневаюсь, что она не может быть квалифицирована как ответ.
инстинкт