Git запрашивает имя пользователя каждый раз, когда я нажимаю


676

Всякий раз, когда я пытаюсь протолкнуть свой репозиторий, Git просит обоих username & password.

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

Итак, как я могу настроить git, чтобы он не запрашивал usernameкаждого git push.

Я новичок в Linux, но IIRC в Windows git pushтолько просит пароль.


1
Связанный вопрос: stackoverflow.com/questions/2233590/…
Wug

@ Wug: Но я не хочу хранить пароль. Я только хочу сохранить имя пользователя.
RanRag

4
попробуйте следовать этим указаниям и пропустить строку пароля.
Вуг


есть также ответ на суперпользователя на свой первоначальный вопрос - superuser.com/questions/847181/...
dk14

Ответы:


975

Изменить (автор @ dk14 по предложению модераторов и комментариев)

ВНИМАНИЕ: Если вы используете credential.helper storeответ, ваш пароль будет храниться в полностью незашифрованном виде («как есть») по адресу ~/.git-credentials. Пожалуйста, ознакомьтесь с разделом комментариев ниже или ответами из раздела «Связанные», особенно если ваш работодатель не проявляет никакой терпимости к вопросам безопасности.

Несмотря на то, что он принят, он не отвечает на фактический вопрос ОП об исключении только имени пользователя (не пароля). Для читателей с этой конкретной проблемой ответ @ grawity может пригодиться.


Оригинальный ответ (@Alexander Zhu):

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

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

Также я предлагаю вам прочитать
$ git help credentials


161
Предупреждение, в этом методе нет защиты. Ваш пароль хранится в виде открытого текста.
Марк Лаката

13
Вы можете найти лучшие способы достижения безопасности здесь - stackoverflow.com/a/28104587/1809978
dk14

4
@MarkLakata - Скажите, пожалуйста, как я могу отменить команду в этом ответе? После того, как я отменить это, я буду использовать безопасный метод для хранения учетных данных.
MasterJoe2

25
@ testerjoe2 попробуйgit config --unset credential.helper
dk14

1
Не забудьте установить время ожидания, по умолчанию 15 минут - установите значение 30 миллионов, чтобы иметь около 1 года. Найдено здесь: stackoverflow.com/a/35942890/1579667
Бендж

181

Вы можете сделать это в .git/configфайле вашего локального хранилища. Этот файл содержит раздел под названием «remote» с записью под названием «url». Запись 'url' должна содержать ссылку на https репозитория, о котором вы говорите.

Когда вы префикс хоста 'url' с вашим именем пользователя, больше gitне должны спрашивать ваше имя пользователя. Вот пример:

url = https://username@repository-url.com

5
Если вы используете специальные символы в имени пользователя или pw, вам следует их избегать. Смотрите en.wikipedia.org/wiki/Percent-escape для правильных экранирующих символов. например, "! @ #" [без кавычек] будет заменено на "% 21% 40% 23". Смотрите также «Daniel Лерха» ответ ниже
nsof

1
Другие люди, работающие в том же хранилище, увидят мое имя пользователя?
CodyBugstein

17
Это должен быть правильный ответ на вопрос ОП, то есть «как сохранить имя пользователя, а не пароль». Этот ответ не только является правильным способом сохранения имени пользователя, но и позволяет избежать возможной угрозы безопасности git config credential.helper store.
RayLuo

Я благодарен за этот ответ и попробовал этот способ, но он все равно спрашивает меня каждый раз (v 2.1.4) - пробовал remoteurl с name@gitlab.com И name%40mailaddress.com@gitlab.com - он всегда проситusername for https://gitlab.com:
Или

1
Я попробовал это и получилunable to access 'https://<me>@bitbucket.org:<x>/<y>.git/': Illegal port number
Ян Грейнджер

118

Постоянная аутентификация в репозиториях Git

Выполните следующую команду, чтобы включить кэширование учетных данных:

$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

Использование также должно указывать срок действия кэширования

git config --global credential.helper "cache --timeout 7200"

После включения кэширования учетных данных оно будет кэшироваться в течение 7200 секунд (2 часа) .


Читать учетные документы

$ git help credentials

Я установил тайм-аут на 7200. Но потом я решил установить его на 5 для тестирования. Поэтому я установил его на 5, но затем, когда я попытался нажать еще раз через 30 секунд, но меня не спросили имя пользователя или пароль.
Баттл Буткус

Может быть, ваши учетные данные не хранятся во всем мире.
Джей Патель

Что касается безопасности, стоит обратиться к документации: «Эта команда кэширует учетные данные в памяти для использования будущими программами Git. Сохраненные учетные данные никогда не касаются диска и забываются после настраиваемого тайм-аута». git-scm.com/docs/git-credential-cache
mloskot

2
не git config credntial.helper storeта ли опасная команда, которая отвечает за хранение незашифрованных учетных данных в файле ~ / .git-credentials? Я думаю (и по моему опыту) команда ... cache ...- достаточна: git config --clogal credential.helper 'cache --timeout 7200'она создает dir: ~/.git-credential-cacheс файлом кеша в нем Итак, просто выполните эту команду, а НЕ команду "... store"
Или

Не работал для меня Все еще спрашиваю пароль каждый раз
Ян Грейнджер

75

Добавьте новые ключи SSH, как описано в этой статье на GitHub .

Если Git по-прежнему запрашивает у вас имя пользователя и пароль, попробуйте перейти https://github.com/на git@github.com:удаленный URL:

$ git config remote.origin.url 
https://github.com/dir/repo.git

$ git config remote.origin.url "git@github.com:dir/repo.git"

19
Это должен быть правильный ответ! Сохранение ваших учетных данных невероятно небезопасно. Если у меня есть ключ SSH, он запрашивает мои учетные данные только потому, что у меня нет правильного URL, как указано здесь.
Алексис Уилке

2
или вы можете использоватьgit config remote.origin.url "ssh://git@yourRepoHost/yourRepoName.git"
ndarkness

1
git config remote.origin.url git@gitlab.com: adammajewski / ray-backward-iteration.git
Адам

1
Спасибо, это ответ, который я искал.
Юпэн Тан

50

Самый простой способ, который я нашел, был с этой командой:

git config --global credential.https://github.com.username <your_username>

Это работает для каждого отдельного сайта и изменяет ваш глобальный конфиг git.

Чтобы увидеть изменения, используйте:

git config --global --edit

1
По какой-то причине это был единственный метод, который работал для меня. Спасибо!
Mathetes

этот метод безопасен? пароль github хранится только на локальном компьютере и не передается на github?
Akin Hwan

Я не знаю, почему это не утвержденный ответ, команда работает отлично и отвечает полностью и только на вопрос: сохранение имени пользователя, а не пароля. Спасибо Бен!
AmaelH

Вы также можете запустить: [git config --global credential.helper 'cache --timeout = 3600'] Таким образом, ваш пароль будет сохраняться каждый час в течение часа
до

31

Если вы используете https вместо ssh, вы можете отредактировать «url», .git/configкак говорит user701648, но при желании вы можете добавить также пароль:

url = https://username:password@repository-url.com

1
Что делать, если там @включен мой пароль? url = https://username:abc@123@repository-url.comЭто дает мне ошибку, чтоCould not resolve host: @123@git.com
Рахул Манкар

Эта usernameчасть, кажется, игнорируется, когда сервер перенаправляет (например, с FOO на FOO.git).
Михаил Т.

22

Вы можете установить свое имя пользователя для всех репозиториев на данном сайте, добавив что-то вроде следующего в ваш файл конфигурации Git. Вы хотите изменить « https://example.com » и «меня» на фактический URL-адрес и ваше фактическое имя пользователя.

[credential "https://example.com"]
    username = me

(Это прямо из "git help credentials")


16

Смена клонированного репо работает:

git remote set-url origin git@github.com:gitusername/projectname.git

Использование кэшированных учетных данных работает, а установка периода ожидания делает вещи менее раздражающими. Если вы используете помощник по учетным данным Windows, это должен быть самый простой способ (особенно если SSH заблокирован).


Это правильный ответ для GitHub (который конкретно задает вопрос ... (не уверен, почему вы получили отрицательное голосование).
Тим

12

Убедитесь, что вы используете SSH вместо http. Проверьте этот так ответ.


3
Но мне пришлось использовать, httpпотому что в моем университете sshзаблокирован отдел системного администратора.
RanRag

Тогда, возможно, эта ссылка поможет вам.
Gkris

Об этом есть официальная страница помощи GitHub. Что случилось со мной, так это то, что я клонировал одно из своих собственных репозиториев перед тем, как войти в систему, чтобы он меня не узнал и по умолчанию вернул HTTPS. help.github.com/articles/changing-a-remote-s-url
anon58192932


9

В дополнение к ответу user701648 вы можете хранить свои учетные данные в своей домашней папке (глобальной для всех проектов) вместо папки проекта, используя следующую команду

$ git config --global credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

9

Когда я использую только git pull, git pull origin xxx, git запрашивает имя пользователя и пароль.

git config credential.helper store

оно работает.


9

Самый простой способ - создать ~/.netrcфайл со следующим содержимым:

machine github.com
login YOUR_GITHUB_USERNAME
password YOUR_GITHUB_PASSWORD

(как показано здесь: https://gist.github.com/ahoward/2885020 )

Вы даже можете закрыть разрешения для этого файла, чтобы никто не смог прочитать ваш пароль, набрав:

chmod 600 ~/.netrc

6

Если вы используете версию SSH , у вас не возникнет проблем с паролями. Только один раз вы генерируете SSH- ключ, чтобы сообщить git, что этот компьютер будет работать с этой учетной записью github, и никогда больше не спрашивать меня о каком-либо доступе (для этого компьютера).

Как создать SSH для Github


4

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

git clone user_name@example.gitrepo.com/my_repo.git


3

ssh+ key authenticationболее надежный способ, чем https+credential.helper

Вы можете настроить использование SSH вместо HTTPS для всех репозиториев следующим образом:

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

url.<base>.insteadOfзадокументировано здесь .


2

Быстрый метод

получить URL вашего мерзавца, когда внутри рабочего каталога:

git config remote.origin.url

тогда :

git config credential.helper store

git push "url of your git"

попросит имя пользователя и пароль последний раз

сделанный.


1

Вы можете просто запустить

git config --global credential.helper wincred

после установки и входа в GIT для Windows в вашей системе.


Не видел слово linux в запросе. Мой плохой
cyperpunk

1

(Только для Mac OS)

для Windows и Linux, пожалуйста, обратитесь к ссылке на документацию Github, упомянутой ниже.

От Github Документация: Документация Ссылка

Кэширование вашего пароля GitHub в Git

  • Вам нужен Git 1.7.10 или новее, чтобы использовать помощник учетных данных osxkeychain.

    чтобы проверить свою версию Git: git --version

  • чтобы выяснить, установлен ли помощник osxkeychain :

    git credential-osxkeychain

    если вы получите следующий ответ, значит, он уже установлен и готов к использованию на вашем Mac:

    > Usage: git credential-osxkeychain <get|store|erase>

    если вы не получили ответ, как показано выше, вы можете установить его, выполнив следующую команду:

    git credential-osxkeychain

  • сказать git глобально использовать osxkeychain для учетных данных git:

    git config --global credential.helper osxkeychain

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.