Как я могу убедиться, что Git не запрашивает у меня имя пользователя и пароль GitHub?

172

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

Я попробовал инструкции по настройке вашей электронной почты в Git , а именно, установил переменные Git github.user и github.token, но это не имело никакого значения.

Я не понимаю, почему это происходит.

Picardo
источник
Вам необходимо кэшировать пароль: help.github.com/articles/set-up-git#password-caching
Петр Юзевич

Ответы:

33

Вам необходимо настроить ssh-agent, для которого вам нужно пройти аутентификацию только один раз. Посмотрите этот ответ в SO для ознакомления.

Бенджамин Банье
источник
1
Но это решение для фраз семейства ssh. Проблема в том, что git использует «git push», который, я полагаю, не запускает ssh-agent. (Я уже сделал это, поэтому я знаю, что это не работает.)
picardo
2
@picardo: я сделал это, и это действительно работает.
Дениф
213

У меня была похожая проблема сегодня: я все испортил в своей рабочей копии, поэтому я решил переименовать каталог и снова клонировать свой проект из github. Но после этого мне пришлось вводить свой пароль для выполнения любого запроса на включение / выключение, вместо того, чтобы вводить фразу-пароль только один раз, как я это делал раньше.

Это потому, что сегодня я использовал протокол https для клонирования проекта! Чтобы проверить, какой протокол вы используете, просто запустите

git config -l

и посмотрите на строку, начинающуюся с 'remote.origin.url'.

Для переключения протоколов:

git config remote.origin.url git@github.com:the_repository_username/your_project.git

the_repository_usernameи your_projectдолжен быть заменен соответствующим именем хранилища и владельцем этого хранилища. Имя пользователя будет вашим, если у вас есть хранилище, или имя пользователя владельца хранилища в противном случае.

Серхио Морстабилини
источник
5
Это сработало для меня. Одна вещь заключается в том, что URL содержит не мое имя пользователя, а адрес репо, как он отображается на github:git@github.com:some-user/repo-name.git
B 7
1
Примечание: Google привел меня сюда. У меня был remote.origin.urlустановлен метод https и я даже не заметил, что есть методы httpsпротив ssh. Этот URL помог мне увидеть очевидное: help.github.com/articles/…
Chris K
Есть ли способ пропустить ввод пароля тоже?
Zishe
Q для тех, у кого есть знания git: есть ли разница (или предпочтения) между git config remote.origin.url ...использованными выше и против git remote set-url origin ...?
Дарин
Я не мог понять, как удалить неправильное происхождение, как это. Ответ:git remote rm origin
Vacilando
30

Если вы используете HTTPS вместо SSH, вы можете выполнить следующее:

  1. Найдите свой удаленный URL (remote.origin.url) с помощью

    git config -l
    

    благодаря Серхио Морстабилини

  2. Ваш удаленный URL будет выглядеть следующим образом: https: // {ИМЯ ПОЛЬЗОВАТЕЛЯ} @ github.com / {ИМЯ ПОЛЬЗОВАТЕЛЯ} / {REPONAME} .git

  3. Выполните эту команду:

    git config remote.origin.url https://{USERNAME}:{PASSWORD}@github.com/{USERNAME}/{REPONAME}.git
    
Эрай
источник
2
само мое имя пользователя содержит @, не работает для меня.
coding_idiot
Но если это не так (вам не нужно использовать электронную почту), это работает отлично! Благодарю.
Killah
4
Если ваше имя пользователя содержит символ @, вам необходимо его кодировать по URL. meyerweb.com/eric/tools/dencoder
Тим Бодейт
1
Вы должны опустить свой пароль по соображениям безопасности.
Зигимантус
3
будьте осторожны, пароль будет храниться в виде простого текста внутри .git/configфайла!
Amro
26

Я предпочитаю использовать HTTPS, я считаю, что это проще и безопаснее, чем настройка ключей ssh.

Используя HTTPS, вы можете запретить git запрашивать ваше имя пользователя для пультов Github с помощью следующего:

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

И вы можете, по крайней мере, уменьшить частоту, с которой git запрашивает ваш пароль:

git config --global credential.helper 'cache --timeout=28800'

Где 28800 - это 8 часов. Я использую эту настройку, чтобы ввести свой пароль только один раз, когда я начинаю свой рабочий день.

После этого вы будете иметь эти записи в вашем ~/.gitconfig

[url "https://yourusername@github.com"]
    insteadOf = https://github.com

[credential]
    helper = cache --timeout=28800

Источник:

http://git-scm.com/docs/git-credential-cache

http://git-scm.com/docs/git-config

stefanmaric
источник
6

Когда вы устанавливаете ключ ssh для github, если это не ваш ключ по умолчанию, вам нужно будет добавить раздел в ваш ~/.ssh/config

Host *github.com
    User git
    IdentityFile ~/.ssh/github_id_rsa
Daenyth
источник
6

Если вы используете Windows по протоколу HTTPS, попробуйте Git Credential Store - он использует Windows Credential Store для хранения вашего имени и пароля.

Windows Credential Store for Git
This application is a small helper app designed to follow the 
git credentials API as defined by the Git Documentation.

Installation
1. Download the git-credential-winstore.exe application
2. Run it! If you have GIT in your PATH, it should just work.

Затем в следующий раз, когда вы введете свое имя и пароль, он запомнит их для вас.

Брайан Бернс
источник
1
Спасибо. Проект был переименован в Git-Credential-Manager-for-Windows .
Майкл С.
5

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

git config remote.origin.url https://USERNAME@github.com/repo_owner/repo_name

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

Именно так я и предпочитаю, так как мне нравится, когда меня заставляют вводить свой пароль на github, прежде чем делиться с миром.

Дэвид Йеске
источник
2

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

Если вы используете двухфакторную аутентификацию, то указание имени пользователя и пароля не сработает - вы получите отказ в доступе. Но вы можете использовать токен доступа к приложению и использовать помощник по учетным данным git для его кеширования. Вот соответствующие ссылки:

И я не помню, где я видел это, но когда вас спрашивают о вашем имени пользователя - вот где вы прикрепляете маркер доступа к приложению. Затем оставьте пароль пустым. Работал на моем Mac.

Джон Берриман
источник
2

использовать SSH

Чтобы запретить GitHub запрашивать пароль во время нажатия, в идеале вы должны использовать SSH ( git@github.com:...) вместо HTTPS URL ( https://github.com/...) и добавить свой ключ SSH в свою учетную запись GitHub . Смотрите: какой удаленный URL я должен использовать?

GitHub - клон с SSH

помощник по учету

В противном случае, если вам действительно нужно использовать HTTPS, для кэширования вашего пароля GitHub в Git , вы должны использовать помощник по учетным данным, чтобы Git запоминал имя пользователя и пароль GitHub при каждом обращении к GitHub.

  • Mac: git config --global credential.helper osxkeychain( osxkeychain helperобязательно),
  • Окна: git config --global credential.helper wincred
  • Linux и другие: git config --global credential.helper cache

.netrc

Другой способ заключается в использовании настройки вашего пользователя / пароля в ~/.netrc( _netrcв Windows), например

machine github.com
login USERNAME
password PASSWORD

OAuth

Используйте OAuth-токен ( персональный API-токен ) для отправки изменений, например

git push https://4UTHT0KEN@github.com/foo/bar

Связанный:

kenorb
источник
1

Также, если вы используете Windows, вы можете использовать:

$ git config --global credential.helper wincred

вам просто нужно войти еще раз, и тогда git запомнит.

Уильям Эрл Чики
источник
1

Запрос имени пользователя раздражает меня, но запрос пароля - это хорошо, поскольку он гарантирует, что вы действительно хотите обнародовать свои изменения ...

Поэтому я просто добавляю это в мой ".gitconfig"

[url "https://myusername@github.com"]
    insteadOf = https://github.com
ViToni
источник
0

Используйте Git Credential Manager для Windows , если вы используете Windows.

Этот проект включает в себя :

  • Безопасное хранение паролей в хранилище учетных данных Windows
  • Поддержка многофакторной аутентификации для Visual Studio Team Services
  • Поддержка двухфакторной аутентификации для GitHub
  • Поддержка создания и использования токенов личного доступа для Visual Studio Team Services и GitHub
  • Поддержка неинтерактивного режима для Visual Studio Team Services при поддержке Azure Directory
  • Проверка подлинности Kerberos для Team Foundation Server
  • Необязательные настройки для оптимизации агента сборки

Просто скачайте последнюю версию и установите ее.

Как пользоваться

Вы не Это волшебно работает, когда нужны учетные данные.

Жалал
источник