Есть ли способ кэшировать учетные данные https для отправки коммитов?

Недавно я переключился на синхронизацию своих репозиториев с https: // на GitHub (из-за проблем с брандмауэром), и он каждый раз запрашивает пароль.

Есть ли способ кэшировать учетные данные вместо аутентификации каждый раз, когда git push?


person Zepplock    schedule 17.03.2011    source источник
comment
См. Также superuser.com/questions/199507/   -  person Colonel Panic    schedule 27.03.2013
comment
Теперь вы можете использовать помощник по учетным данным для шифрования _netrc файла, содержащего ваши учетные данные. См. мой ответ ниже. Я обнаружил, что это безопаснее, чем git-credential-winstore.exe (кеш памяти), который немного глючит в Windows.   -  person VonC    schedule 21.08.2013
comment
git-credential-winstore лучше всего работал с Windows. Что глючит? Настройка ssh - предпочтительный вариант, хотя я делал это несколько раз, это гораздо более подвержено ошибкам, и иногда просто не работает, когда вам нужно подключиться к нескольким хостам.   -  person Bron Davies    schedule 24.09.2015
comment
Под сертификатом SSH я предполагаю, что вы имеете в виду закрытый ключ SSH.   -  person Michael Mior    schedule 01.06.2017


Ответы (24)


С Git версии 1.7.9 и новее

Начиная с Git 1.7.9 (выпущенного в конце января 2012 г.), в Git есть удобный механизм, позволяющий избежать постоянного ввода пароля для HTTP / HTTPS, который называется помощники по учетным данным. (Спасибо dazonic за указание на эту новую функцию в комментариях ниже.)

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

git config --global credential.helper cache

... который указывает Git хранить ваш пароль в кеше в памяти (по умолчанию) 15 минут. Вы можете установить более длительный тайм-аут с помощью:

git config --global credential.helper "cache --timeout=3600"

(Этот пример был предложен на странице справки GitHub для Linux .) При желании вы также можете постоянно хранить свои учетные данные, см. другие ответы ниже.

Справка GitHub также предлагает, что если вы используете Mac OS X и использовали Homebrew для установки Git, вы можете использовать собственное хранилище ключей Mac OS X с :

git config --global credential.helper osxkeychain

Для Windows есть помощник под названием Git Credential Manager для Windows или wincred в msysgit.

git config --global credential.helper wincred # obsolete

С помощью Git для Windows 2.7.3 + (Март 2016 г.):

git config --global credential.helper manager

Для Linux используйте (в 2011 г.) gnome-keyring (или другая реализация связки ключей, например KWallet).

В настоящее время (2020 г.) это будет (в Linux)

Fedora

sudo dnf install git-credential-libsecret
git config --global credential.helper /usr/libexec/git-core/git-credential-libsecret

Ubuntu

sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

В версиях Git до 1.7.9

В версиях Git до 1.7.9 этот более безопасный вариант недоступен, и вам нужно будет изменить URL-адрес, который использует ваш origin удаленный компьютер, чтобы включить пароль следующим образом:

https://you:[email protected]/you/example.git

... другими словами, с :password после имени пользователя и перед @.

Вы можете установить новый URL для своего origin пульта с помощью:

git config remote.origin.url https://you:[email protected]/you/example.git

Убедитесь, что вы используете https, и вы должны знать, что если вы это сделаете, ваш пароль GitHub будет сохранен в виде открытого текста в вашем каталоге .git, что, очевидно, нежелательно.

С любой версией Git (ну, начиная с версии 0.99)

Альтернативный подход - поместить ваше имя пользователя и пароль в ваш ~/.netrc файл, хотя, как и в случае сохранения пароля в удаленном URL-адресе, это означает, что ваш пароль будет храниться на диске в виде обычного текста и, следовательно, менее безопасен и не рекомендуется. Однако, если вы хотите использовать этот подход, добавьте следующую строку в свой ~/.netrc:

machine <hostname> login <username> password <password>

... заменив <hostname> именем хоста сервера, а <username> и <password> своим именем пользователя и паролем. Также не забудьте установить ограничительные разрешения файловой системы для этого файла:

chmod 600 ~/.netrc

Обратите внимание, что в Windows этот файл должен называться _netrc, и вам может потребоваться определить переменную среды% HOME% - для получения дополнительной информации см.

person Mark Longair    schedule 17.03.2011
comment
Не храните свой пароль в виде обычного текста. Начиная с Git 1.7.9 вы можете использовать помощники по учетным данным. git config --global credential.helper osxkeychain в OS X. Информацию о других ОС см. На странице help.github.com/articles/set-up -git - person dazonic; 22.06.2012
comment
FWIW, связка ключей osx является частью базового исходного кода GIT, а не эксклюзивным компонентом Brew или MacPorts или какой-либо другой разновидности месяца. И вам даже не нужно собирать git с нуля - просто cd contrib / credential / osxkeychain / и запустите make. - person synthesizerpatel; 09.04.2013
comment
osxkeychain только для https URL репозиториев? или он работает также при использовании ssh URL репозиториев + ключи? - person chovy; 30.10.2013
comment
При двухфакторной аутентификации вы должны использовать то, что github называет Токен личного доступа. Фактически, вы всегда должны использовать его, так как в отличие от пароля вы можете контролировать, какой доступ он дает. Просто замените пароль в URL-адресе, чтобы получить https://username:[email protected]/username/project.git. Это делает пароли в виде простого текста, хранящиеся на диске, практически достаточно безопасными для использования. - person Russell Stuart; 10.04.2014
comment
@chovy Помощник по учетным данным osxkeychain не нужен, если вы используете ssh. Вместо этого вы можете использовать ssh-agent. Если вы используете рабочий стол Linux или OS X, связка ключей должна автоматически подобрать для вас парольную фразу ключа ssh (вам может потребоваться запустить ssh-add). Windows может использовать Pageant, если у вас есть PuTTY. Если вы используете Linux в автономной среде, вам потребуется немного больше настроек, но вы можете легко найти руководство в Google. - person Dan Albert; 26.04.2014
comment
@dazonic Будет ли пароль, который хранится в моем локальном каталоге .git, доступен для всех, кто клонирует его с моего github? Другими словами, уйдет ли когда-нибудь пароль, хранящийся в виде обычного текста, с моей машины? - person laggingreflex; 30.06.2014
comment
@laggingreflex, если вы используете помощник по учетным данным, он не хранится в виде обычного текста в .git, он хранится в цепочке ключей паролей ОС, которая зашифрована. Он даже не оставит твою машину, нет. - person dazonic; 10.07.2014
comment
@dazonic Нет, я имел ввиду в текстовом файле (используя you:password@ URL)? Когда он хранится в моем каталоге .git, и я отправляю обновления, а затем кто-то другой извлекает его с удаленного компьютера, есть ли у них текстовый файл с моим паролем (you:password@ URL)? - person laggingreflex; 10.07.2014
comment
@laggingreflex нет. .git/config не поднимается. Но хранить пароли в виде простого текста локально по-прежнему плохая практика. - person dazonic; 11.07.2014
comment
git config --global credential.helper cache не работает в Windows: stackoverflow.com/questions/11693074/ используйте gitcredentialstore в Windows и будьте счастливы - person Sebastian J.; 02.01.2015
comment
Есть ли способ установить этот тайм-аут до бесконечности? - person sudo; 10.08.2015
comment
Может быть, вы можете попробовать очень большое число, например 999999999 - person Asped; 04.09.2015
comment
'git config --global credential.helper store' хранит пароль. git-scm.com/docs/git-credential-store/1.7. 12.1 - person quadroid; 20.10.2015
comment
Пользователи Ubuntu могут попробовать этот gnome-keyring-helper - person crisron; 28.12.2015
comment
git config --global credential.helper wincred отлично работал у меня под Windows 10. В первый раз вам нужно ввести учетные данные, но 2-й, 3-й и т. д. он работает должным образом. - person hfrmobile; 04.08.2016
comment
Что ж ... Я просто использую кеш git (с таймаутом 999999999999), потому что это всего лишь одна команда, которую я могу ввести один раз без каких-либо движущихся частей. У меня были плохие времена, пытаясь заставить SSH-ключи работать в прошлом. - person sudo; 11.08.2016
comment
git config --global credential.helper cache у меня тоже не работал на Ubuntu. - person Sergiy Ostrovsky; 03.03.2017
comment
уровень сложности этих инструментов в 2017 году безумный. Эта командная строка должна была появиться в 1980-х годах. Git config credential-manager = wincred ??? веселье и этот файл .bash_history в вашей пользовательской папке хранит все пароли, которые вы когда-либо вводили в bash, в виде открытого текста. безумный. - person Triynko; 15.12.2017
comment
Проблема безопасности: диспетчер учетных данных Windows хранит ваш пароль в виде открытого текста, доступного для всех, кто вошел в вашу учетную запись Windows. Все, что им нужно сделать, это отправить запрос диспетчеру учетных данных, например printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get (подробнее здесь). Вы всегда должны использовать персональный доступ token с этим и, конечно же, используйте двухфакторную аутентификацию в своей учетной записи GitHub. - person cjs; 21.02.2018
comment
Моя версия git для macOS, похоже, поддерживает osxkeychain git version 2.14.3 (Apple Git-98) - person ; 08.03.2018
comment
@Triynko Вот почему вы не вводите пароли в командной строке. Любой достойный инструмент командной строки, который обрабатывает пароли, либо не принимает их в командной строке, либо категорически не рекомендует. Всегда рекомендуется предоставлять учетные данные в интерактивном режиме. Вы запускаете команду, она запрашивает Password: , и никакой другой процесс не видит, что вы вводите. Любой, кто использует пароли в командной строке оболочки, заслуживает того, что получает. (Также отображается в ps во время выполнения команды.) Но те из нас, кто не волнуется при простом виде командной строки, узнали об этом еще в 1990-х годах. - person FeRD; 10.07.2018
comment
@sudo, чтобы установить тайм-аут на ~ (Бесконечность), вы должны испортить Integer, установите его на -1, оно должно быть в максимальном значении. - person bsound; 13.10.2019
comment
@nullptr Я бы не стал на это полагаться, если это не задокументированное поведение. Возможно, ваша версия git делает это, не знаю, все ли они делают. - person sudo; 14.10.2019
comment
Что ж, время всегда положительно и никогда не отрицательно. Итак, git должен использовать целое число без знака для хранения тайм-аута. Для понимания см. Этот пример, в котором объясняется трюк. - person bsound; 14.10.2019
comment
Если для тайм-аута установлено максимальное положительное значение, он будет длиться около ~138 лет. Что может быть немного нереально. - person bsound; 19.10.2019

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

git config credential.helper store

Примечание. Хотя это удобно, Git сохранит ваши учетные данные в виде открытого текста в локальном файле (.git-credentials) в каталоге вашего проекта (см. «Домашний» каталог ниже). Если вам это не нравится, удалите этот файл и переключитесь на использование опции кеширования.

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

git config --unset credential.helper

Чтобы хранить пароли в .git-credentials в вашем %HOME% каталоге, а не в каталоге проекта: используйте флаг --global

git config --global credential.helper store
person Giri Alwar    schedule 03.09.2012
comment
В Windows вы можете загрузить вспомогательную утилиту, которая настраивает вещи для хранения зашифрованной версии вашего пароля GIT в Windows Creditial Store, см. confluence.atlassian.com/display/STASH/ - person Contango; 22.01.2013
comment
Я обнаружил, что мне нужно указать --global, иначе он попытается сохранить настройки в текущем репозитории: git config --global credential.helper store - person Brian Gordon; 15.05.2013
comment
Зачем делать кеш вместо постоянного хранения? Совместное использование компьютеров или что-то в этом роде? - person Michael J. Calkins; 24.08.2013
comment
Хм хранить постоянно используя следующее после чего? Я получаю сообщение об ошибке, что не удается заблокировать .git / config. Кто создает этот файл? - person Victor Eijkhout; 17.05.2014
comment
@VictorEijkhout - используйте команду из каталога репозитория или используйте глобальную опцию, как Брайан Гордон предложил пару комментариев выше. - person StarNix; 19.05.2014
comment
вместо хранения, может быть, было бы лучше просто кэшировать его с каким-то длинным значением, например, на неделю или две, чтобы выяснить максимум, который он позволит сначала использовать самые большие значения, если вы этого не сделаете, тогда вы не узнаете, было ли это значение принято . Я успешно установил тайм-аут на 99999, что составляет около 11 дней, я не уверен, что это за максимум, но большинство программистов выбирают выравнивание значений по байту (степень 256) или метрической границе (степень 10), метрической более вероятно для значений, хранящихся в тексте. Используйте git config --global --get-all credential.helper, чтобы узнать свои текущие значения. - person osirisgothra; 20.06.2014
comment
лучшее решение. Спасибо. - person Dan Ochiana; 07.09.2014
comment
@BrianGordon Я использую GIT 1.9.5 в Windows, и флаг --global был лишним. Даже без этого флага файл учетных данных был создан в %USER_HOME% каталоге. - person jFrenetic; 18.08.2015
comment
Перенесемся в 2015 год, это больше не рекомендуется, потому что пароль не зашифрован. Вместо этого обратитесь к этому ответу: stackoverflow.com/a/32470658/193634 - person Rosdi Kasim; 23.12.2015
comment
если не хранить в виде обычного текста, чем это защищено? Ваш пароль? Разве тогда не пришлось бы спрашивать у вас пароль администратора при подключении к git? Разве не странно, что для получения другого пароля нужно вводить пароль? - person Cruncher; 10.03.2016
comment
Продолжение ответа @osirisgothra: просто установите очень долгий тайм-аут. git config --global credential.helper "cache --timeout=9999999999". Это сработало для меня и составляет 317 лет. - person socom1880; 02.04.2016

TL; DR; Используйте зашифрованный файл netrc с Git 1.8.3+.

Сохранение пароля для URL-адреса HTTPS репозитория Git возможно с ~/.netrc (Unix) или %HOME%/_netrc (обратите внимание на _) в Windows.

Но: этот файл будет хранить ваш пароль в виде обычного текста.

Решение: зашифруйте этот файл с помощью GPG (GNU Privacy Guard) и сделайте расшифровку Git ему каждый раз требуется пароль (для работы _4 _ / _ 5 _ / _ 6 _ / _ 7_).


Примечание. В Git 2.18 (второй квартал 2018 г.) теперь вы можете настроить GPG, используемый для расшифровки зашифрованного .netrc файла.

См. commit 786ef50, commit f07eeed (12 мая 2018 г.), автор Луис Марсано (` `).
(Объединено Junio ​​C Hamano - gitster - в commit 017b7c5, 30 мая 2018 г.)

git-credential-netrc: принять вариант gpg

git-credential-netrc был жестко запрограммирован на расшифровку с помощью 'gpg' независимо от параметра gpg.program.
Это проблема в таких дистрибутивах, как Debian, которые называют современный GnuPG чем-то другим, например 'gpg2'


Пошаговые инструкции для Windows

В Windows:

(В дистрибутиве Git есть gpg.exe, но при использовании полной установки GPG есть gpg-agent.exe, который запомнит вашу парольную фразу, связанную с вашим ключом GPG.)

  • Установите gpg4Win Lite, минимальный интерфейс командной строки gnupg (возьмите самый последний gpg4win-vanilla-2.X.Y-betaZZ.exe) и укажите в PATH каталог установки GPG:

    set PATH=%PATH%:C:\path\to\gpg
    copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
    

(Обратите внимание на команду 'copy': Git потребуется сценарий Bash для выполнения команды 'gpg'. Поскольку gpg4win-vanilla-2 поставляется с gpg2.exe, вам необходимо продублировать его.)

  • Создайте или импортируйте ключ GPG и доверяйте ему:

    gpgp --import aKey
    # or
    gpg --gen-key
    

(Убедитесь, что к этому ключу добавлена ​​кодовая фраза.)

  • Доверяйте этому ключу

  • Установите вспомогательный сценарий учетных данных в каталог в вашем %PATH%:

    cd c:\a\fodler\in\your\path
    curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
    

(Осторожно: скрипт переименован в Git 2.25.x / 2.26, см. Ниже)

(Да, это сценарий Bash, но он будет работать в Windows, поскольку будет вызываться Git.)

  • Сделайте файл _netrc открытым текстом

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https
    

(Не забывайте часть «protocol»: «http» или «https» в зависимости от URL-адреса, который вы будете использовать.)

  • Зашифруйте этот файл:

    gpg -e -r a_recipient _netrc
    

(Теперь вы можете удалить файл _netrc, оставив только _netrc.gpg зашифрованный.)

  • Используйте этот зашифрованный файл:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
    

(Обратите внимание на '/': C:\path\to... вообще не сработает.) (Сначала вы можете использовать -v -d, чтобы увидеть, что происходит.)

С этого момента любая команда Git, использующая URL-адрес HTTP (S), требующий аутентификации, будет расшифровывать этот _netrc.gpg файл и использовать логин / пароль, связанные с сервером, с которым вы связываетесь. В первый раз GPG запросит у вас парольную фразу вашего ключа GPG, чтобы расшифровать файл. В других случаях gpg-agent, запускаемый автоматически первым вызовом GPG, предоставит вам эту парольную фразу.

Таким образом, вы можете запомнить несколько URL / логинов / паролей в одном файле и сохранить его на вашем диске в зашифрованном виде.
Я считаю его более удобным, чем «помощник по кешированию», когда вам нужно запоминать и вводить (один раз за сеанс) разные пароли для каждой из ваших удаленных служб, чтобы этот пароль был кэширован в памяти.


В Git 2.26 (первый квартал 2020 г.) образец помощника по учетным данным для использования .netrc был обновлен, чтобы работать прямо из коробки. См. patch / обсуждение.

См. commit 6579d93, commit 1c78c78 (20 декабря 2019 г.) Дентон Лю ( Denton-L).
(Объединено Junio ​​C Hamano - gitster - в commit 1fd27f8, 25 декабря 2019 г.)

contrib/credential/netrc: сделать PERL_PATH настраиваемым

Подписано: Дентон Лю

Путь shebang для интерпретатора Perl в git-credential-netrc был жестко запрограммирован.
Однако у некоторых пользователей он может быть расположен в другом месте, и поэтому им пришлось бы вручную редактировать скрипт.

Добавьте префикс .perl к сценарию, чтобы обозначить его как шаблон и игнорировать сгенерированную версию.
Дополните Makefile, чтобы он генерировал git-credential-netrc из git-credential-netrc.perl, как и другие сценарии Perl.

Рецепты Makefile были бессовестно украдены у contrib/mw-to-git/Makefile.

А также:

В версии 2.26 (первый квартал 2020 г.) пример помощника по учетным данным для использования .netrc был обновлен для работы прямо из коробки.

См. commit 6579d93, commit 1c78c78 (20 декабря 2019 г.) Дентон Лю ( Denton-L).
(Объединено Junio ​​C Hamano - gitster - в commit 1fd27f8, 25 декабря 2019 г.)

contrib/credential/netrc: работа вне репо

Подписано: Дентон Лю

В настоящее время git-credential-netrc не работает вне репозитория git. Это не удается со следующей ошибкой:

fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.

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

Вызов несамостоятельной версии config(), чтобы git-credential-netrc больше не нужно было запускать в репозитории.

Джефф Кинг (peff) добавляет:

Я предполагаю, что вы используете netrc с шифрованием gpg (в противном случае вам, вероятно, следует просто использовать credential-store).
Для доступа с паролем «только для чтения» я нахожу комбинацию _ 60_ с такой конфигурацией немного лучше:

[credential "https://github.com"]
  username = peff
  helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"
person VonC    schedule 21.08.2013
comment
пробуя то же самое на linux .. git config --local credential.helper netrc -f /home/me/.netrc.gpg -v -d ..и я получаю git: 'credential-netrc' не является командой git. см. 'git --help' - person sunny; 21.12.2013
comment
@sunny Для этого используется curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc: вам нужно скопировать git-credential-netrc в любом месте вашего пути ($PATH), чтобы git мог вызывать 'credential-netrc'. - person VonC; 22.12.2013
comment
Что ж, _netrc не работал у меня на Windows 7 ПК, но .netrc работал на youtube-dl с переданным ему аргументом --netrc. - person Iulian Onofrei; 13.04.2015
comment
@VonC текущий URL-адрес выглядит https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl (через семь лет) - person Gwyneth Llewelyn; 26.03.2020
comment
@GwynethLlewelyn Спасибо. Я соответствующим образом отредактировал ответ. Не стесняйтесь редактировать его самостоятельно, если увидите любую другую устаревшую информацию. - person VonC; 26.03.2020
comment
@VonC все выглядит отлично для меня - отличное обновление исходного ответа, кстати! Отличная работа :-) - person Gwyneth Llewelyn; 02.05.2020
comment
Можете добавить, как это сделать на линуксе? Потому что совершенно непонятно, что вы здесь делаете. - person aldokkani; 30.09.2020
comment
@aldokkani Извините за задержку, я был на работе. Этот старый (2013 год) ответ был для Windows, но в то время он не пользовался хорошим помощником по учетным данным (например, для Linux). Я бы не стал использовать его сегодня, когда существует GCM4W: github.com/microsoft/Git -Credential-Manager-для-Windows. Я отредактировал ответ Марка Лонгаира, чтобы добавить обновленные помощники учетных данных Linux: stackoverflow.com/posts/5343146/revisions - person VonC; 30.09.2020

Используйте хранилище учетных данных.

Для Git 2.11+ в OS X и Linux использовать встроенное хранилище учетных данных Git:

git config --global credential.helper libsecret

Для msysgit 1.7.9+ в Windows:

git config --global credential.helper wincred

Для Git 1.7.9+ в OS X используйте:

git config --global credential.helper osxkeychain
person roo2    schedule 09.09.2015
comment
Я уверен, что это правильный вариант, но, к сожалению, получаю сообщение об ошибке: git: 'credential-gnome-keyring' is not a git command. See 'git --help'. - person codepleb; 12.02.2017
comment
@TrudleR Я обновил свой ответ, рекомендуя обновить git до 2.11, а затем, используя git config --global credential.helper libsecret, похоже, что gnome-keyring устарел stackoverflow.com/questions/13385690/ - person roo2; 13.02.2017
comment
Спасибо, но почему-то получаю ту же ошибку. Я делаю что-то неправильно? Я набираю команду и ничего не происходит. Как только я нажимаю, меня просят ввести учетные данные, которые я успешно вставляю, но после этого я получаю сообщение об ошибке, что это не команда git. - person codepleb; 15.02.2017
comment
Прежде чем libsecret начнет работать в Linux, вам необходимо выполнить следующие действия: stackoverflow.com/a/40312117/775800 - person Lavamantis; 03.05.2017
comment
Еще одна вещь - если у вас включена двухфакторная аутентификация на Github, ваш пароль не будет работать. Но вы можете создать личный токен доступа на странице настроек Github, и этот токен будет работать как ваш пароль. github.com/github/hub/issues/822 - person Lavamantis; 03.05.2017
comment
Проблема безопасности: диспетчер учетных данных Windows делает ваш пароль открытым текстом доступным для всех, кто вошел в вашу учетную запись Windows. Все, что им нужно сделать, это отправить запрос диспетчеру учетных данных, например printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get (подробнее здесь). Вы всегда должны использовать персональный доступ token с этим и, конечно же, используйте двухфакторную аутентификацию в своей учетной записи GitHub. - person cjs; 21.02.2018
comment
Простой, но отличный ответ! Это сработало для меня из коробки в openSUSE 13.2, хотя это кажется довольно старой установкой. - person cchwala; 23.11.2020

Есть простой старомодный способ сохранить учетные данные пользователя в URL-адресе HTTPS:

https://user:[email protected]/...

Вы можете изменить URL-адрес с помощью git remote set-url <remote-repo> <URL>

Очевидным недостатком такого подхода является то, что вам нужно хранить пароль в виде обычного текста. Вы все равно можете просто ввести имя пользователя (https://[email protected]/...), что, по крайней мере, сэкономит вам половину хлопот.

Возможно, вы предпочтете переключиться на SSH или использовать клиентское программное обеспечение GitHub.

person wortwart    schedule 06.01.2014
comment
Возможно, потребуется закодировать имя пользователя / пароль, см. stackoverflow.com/a/34611311/3906760 - person MrTux; 05.01.2016

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

git config credential.helper store

Когда вы в следующий раз введете пароль с помощью pull или push, он будет сохранен в файле .git-credentials в виде обычного текста (немного небезопасно, но просто поместите его в защищенную папку).

Вот и все, как сказано на этой странице:

git-credential-store

person sgoran    schedule 21.09.2016
comment
Для Git для Windows 2.7.3 (март 2016 г.): github.com/git-for-windows/git/releases?after=v2.8.4.windows.1, вместо этого будет git config credential.helper manager - person VonC; 21.09.2016

Для меня не сразу было очевидно, что мне нужно сначала загрузить помощник! Я нашел загрузку credential.helper по адресу Постоянная аутентификация Atlassian в репозиториях Git.

Цитата:

Выполните следующие действия, если вы хотите использовать Git с кэшированием учетных данных в OS X:

Загрузите двоичный файл git-credential-osxkeychain.

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

chmod a+x git-credential-osxkeychain

Поместите его в каталог /usr/local/bin.

Выполните команду ниже:

git config --global credential.helper osxkeychain
person Ben    schedule 05.10.2012

Просто включите учетные данные для входа в качестве части URL-адреса:

git remote rm origin
git remote add origin https://username:[email protected]/path/to/repo.git

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

person Tarun Gupta    schedule 03.07.2014
comment
он будет работать, вам нужно избежать @ с% 40 в своем идентификаторе электронной почты - person Tarun Gupta; 18.04.2016
comment
Что, если в идентификаторе электронной почты стоит знак "+"? Я попробовал тот же побег, но толчок сказал, что репо не найдено - person killjoy; 02.08.2016
comment
иметь% 2B вместо + - person Tarun Gupta; 03.08.2016
comment
Хранение пароля в виде открытого текста и легкодоступного может быть не лучшим решением. - person reducing activity; 28.11.2018

В установке GNU / Linux также неплохо работает ~ / .netrc:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

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

person helloPiers    schedule 05.12.2012
comment
Не забудьте также chmod 0600 ~/.netrc. - person poolie; 31.05.2013
comment
Просто хочу оставить здесь ссылку на страницу руководства Ubuntu netrc . Мне нужно было создать его для другого пользователя (/home/git/.netrc), а затем сменить владельца на этого пользователя. - person zacharydl; 14.01.2015

Для Windows вы можете использовать подключаемый модуль Git Credential Manager (GCM). В настоящее время поддерживается Microsoft. Приятно то, что он сохраняет пароль в хранилище учетных данных Windows, а не в виде обычного текста.

Установщик находится на странице выпусков проект. Также будет установлена ​​официальная версия Git для Windows со встроенным диспетчером учетных данных. Он позволяет двухфакторную аутентификацию для GitHub (и других серверов). И имеет графический интерфейс для первоначального входа в систему.

Для пользователей Cygwin (или пользователей, уже использующих официальный Git для Windows) вы можете предпочесть ручную установку. Загрузите zip-пакет со страницы на странице выпусков. Распакуйте пакет, а затем запустите файл install.cmd. Это будет установлено в вашу ~/bin папку. (Убедитесь, что ваш каталог ~/bin находится в вашем PATH.) Затем вы настраиваете его с помощью этой команды:

git config --global credential.helper manager

Затем Git запустит git-credential-manager.exe при аутентификации на любом сервере.

person Nadeem Khedr    schedule 24.05.2014
comment
Любой, кто вошел в вашу учетную запись, имеет легкий доступ к открытому тексту пароля. Все, что им нужно сделать, это отправить запрос диспетчеру учетных данных, например printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get (подробнее здесь). Вы всегда должны использовать персональный доступ token с этим и, конечно же, используйте двухфакторную аутентификацию в своей учетной записи GitHub. - person cjs; 21.02.2018

Если вы не хотите хранить свой пароль в виде открытого текста, как сказал Марк, вы можете использовать другой URL-адрес GitHub для выборки, чем для отправки. В вашем файле конфигурации под [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git

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

person MatrixFrog    schedule 19.03.2011

OAuth

Вы можете создать свой собственный личный токен API (OAuth) и используйте его так же, как и обычные учетные данные (по адресу: /settings/tokens) . Например:

git remote add fork https://[email protected]/foo/bar
git push fork

.netrc

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

machine github.com
login USERNAME
password PASSWORD

Для HTTPS добавьте дополнительную строку:

protocol https

Учетный помощник

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

  • Mac: git config --global credential.helper osxkeychain (требуется osxkeychain helper),
  • Windows: git config --global credential.helper wincred
  • Linux и другие: git config --global credential.helper cache

Связанный:

person kenorb    schedule 19.06.2016

Вы можете использовать помощников по учетным данным.

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

где x - количество секунд.

person Charan    schedule 27.03.2013
comment
Это количество секунд ... Какой-то гений обновил его как миллисекунды, и все одобрили без проверки. Пожалуйста, не вводите людей в заблуждение, если не знаете ответа. Спасибо! - person Charan; 09.09.2014
comment
Можете ли вы дать ссылку на место, где перечислены и объяснены store, cache и другие общие вещи? - person Notinlist; 20.11.2014
comment
Не забудьте упомянуть тот факт, что это дерьмо, если вы не вызовете другую конкретную команду, чтобы сначала использовать «кеш» в качестве менеджера? Все это настолько загадочно, все ответы неполные, и ни один из них не работает. Невероятно неприятно. См. Вместо этого: stackoverflow.com/a/24800870/88409 - person Triynko; 21.11.2017

После клонирования репозитория repo вы можете отредактировать repo/.git/config и добавить конфигурацию, как показано ниже:

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

Тогда вас больше не будут просить username и password.

person Xiaorong Liao    schedule 05.01.2017
comment
У меня работает с helper = manager (но меня просят имя пользователя + репо для первого нажатия). - person Stéphane Laurent; 22.01.2017
comment
с helper = manager я получаю ошибку credential-manager не является командой git - person PapaDiHatti; 01.05.2017
comment
К сожалению, git игнорирует пароль в файле конфигурации. .git_credentials с credential.store - единственный вариант. - person Avamander; 04.04.2018

Я знаю, что это небезопасное решение, но иногда вам нужно просто простое решение - без установки чего-либо еще. И поскольку helper = store у меня не работал, я создал фиктивный помощник:

Создайте сценарий и поместите его в папку bin вашего пользователя, здесь с именем credfake, этот сценарий предоставит ваше имя пользователя и пароль:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

сделать его исполняемым:

chmod u+x /home/mahuser/bin/credfake

затем настройте его в git:

git config --global credential.helper /home/mahuser/bin/credfake

(или используйте его без --global только для одного репо)

и - voilá - git будет использовать этот пользователь + пароль.

person bebbo    schedule 27.05.2017
comment
Я согласен. Действительно простое (хотя и небезопасное) решение. +1, если вы знаете, что делаете. - person VonC; 27.05.2017

Вместо пароля учетной записи следует использовать токен аутентификации. Перейдите в настройки / приложения GitHub и затем создайте личный токен доступа. Токен можно использовать так же, как и пароль.

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


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

  1. Напишите файл конфигурации SSH, содержащий Host, IdentityFile для ключа развертывания, возможно, UserKnownHostsFile и, возможно, User (хотя я думаю, что он вам не нужен).
  2. Напишите сценарий оболочки оболочки SSH, который виртуально ssh -F /path/to/your/config $*
  3. Добавьте GIT_SSH=/path/to/your/wrapper перед вашей обычной командой Git. Здесь git remote (происхождение) должно использовать формат [email protected]:user/project.git.
person minghua    schedule 04.06.2014

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

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

Ваши учетные данные будут сохранены в течение 3600 секунд.

person Sarvar Nishonboyev    schedule 17.07.2014
comment
Значит, через 3600 секунд надо снова вводить пароль ??? Как сохранить их навсегда? - person Bulma; 27.08.2015
comment
$ git config credential.helper 'cache --timeout = 3600' ошибка: не удалось заблокировать файл конфигурации .git / config: нет такого файла или каталога - person PlantationGator; 21.10.2015
comment
Это сработало: git config --global credential.helper 'cache --timeout = 3600' - person PlantationGator; 21.10.2015
comment
Будет ли это работать внутри контейнера Docker (на основе windowsservercore)? - person Peter Mortensen; 30.09.2018
comment
@NeilChowdhury, это неправда. Согласно официальному doc, по умолчанию пароль будет храниться 15 мин. Не распространяйте подобные необоснованные слова! - person jdhao; 25.09.2020

Обычно у вас есть удаленный URL, примерно так,

git remote -v

origin    https://gitlab.com/username/Repo.git (fetch)
origin    https://gitlab.com/username/Repo.git (push)

Если вы хотите пропустить имя пользователя и пароль при использовании git push, попробуйте следующее:

 git remote set-url origin https://username:[email protected]/username/Repo.git

Я только что добавил тот же URL (с данными пользователя, включая пароль) в origin.

ПРИМЕЧАНИЕ. Это не сработает, если имя пользователя является идентификатором электронной почты.

git remote -v

origin    https://username:[email protected]/username/Repo.git (fetch)
origin    https://username:[email protected]/username/Repo.git (push)
person Nayagam    schedule 15.12.2017

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

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

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

person JnBrymn    schedule 25.09.2014
comment
при использовании двухсторонней аутентификации в качестве пароля используется токен доступа. имя пользователя остается таким же, как всегда - person Ben Yitzhaki; 19.02.2019

У меня это работает, я использую Windows 10

git config --global credential.helper wincred
person Mostafa Nawara    schedule 02.07.2016

Я получил ответ от gitcredentials (7 ) Страница руководства. В моем случае у меня нет кэша учетных данных в моей установке Windows; Я использую credential-store.

После того, как я использую хранилище учетных данных, имя пользователя и пароль сохраняются в файле [папка пользователя] / .git-credentials. Чтобы удалить имя пользователя / пароль, просто удалите содержимое файла.

person Mike Lin    schedule 27.01.2014
comment
Если у вас нет кеша учетных данных в ваших окнах, я бы посоветовал использовать git config --global credential.helper wincred этот пароль для постоянного хранения. - person Chetabahana; 03.04.2016

Вы также редактируете файл bashrc и добавляете в него скрипт.

Это запросит ваш пароль один раз при запуске Git, а затем запомнит его до тех пор, пока вы не выйдете из системы.

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi
person ThePatelGuy    schedule 14.07.2016

В документации композитора упоминается, что вы можете запретить ему использовать GitHub API, так что он действует как git clone:

Если вы установите для ключа no-api значение true в репозитории GitHub, он будет клонировать репозиторий, как и в любом другом репозитории Git, вместо использования GitHub API. Но в отличие от прямого использования драйвера git, композитор по-прежнему будет пытаться использовать zip-файлы GitHub.

Таким образом, раздел будет выглядеть так:

"repositories": [
    {
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    }
],

Имейте в виду, что API существует не просто так. Так что это должно быть крайним средством в связи с возросшей нагрузкой на github.com.

person sebastianwagner    schedule 05.06.2014
comment
Не уверен, какое отношение этот ответ имеет к исходному вопросу. - person Charles Oppermann; 10.07.2015

Если вы используете osxkeychain и срок действия токена истек, и вы хотите его обновить, выполните следующие действия:

Запустите терминал, затем дважды нажмите Enter.

git credential-osxkeychain erase
 host=github.com
 protocol=https

Теперь вам будет предложено ввести имя пользователя / пароль. Однако иногда кажется, что этого не происходит, и вам нужно продолжать входить повторно.

В этом случае перезагрузите компьютер. Теперь, когда вы в следующий раз запустите команду git и введете свое имя пользователя / пароль, она будет сохранена.

person Andrew Schreiber    schedule 14.12.2019