Есть ли способ кэшировать учетные данные GitHub для отправки коммитов? - PullRequest
1773 голосов
/ 17 марта 2011

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

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

Ответы [ 23 ]

2291 голосов
/ 17 марта 2011

С 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 или , закрученный в msysgit .

git config --global credential.helper wincred # obsolete

С Git для Windows 2.7.3 + (март 2016):

git config --global credential.helper manager

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

С версиями Git до 1.7.9

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

https://you:password@github.com/you/example.git

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

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

git config remote.origin.url https://you:password@github.com/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% - для получения более подробной информации см .:

689 голосов
/ 03 сентября 2012

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

git config credential.helper store

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

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

git config --unset credential.helper

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

git config --global credential.helper store
94 голосов
/ 21 августа 2013

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

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

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

Решение : зашифруйте этот файл с помощью GPG (GNU Privacy Guard) и заставьте Git расшифровывать его каждый раз, когда ему потребуется пароль (для push / pull / fetch / clone операция).


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

См. коммит 786ef50 , коммит f07eeed (12 мая 2018) Луис Марсано (``) .
(Объединено с Junio ​​C Hamano - gitster - в коммит 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
    

(Обязательно введите ключевую фразу для этой клавиши.)

(Да, это скрипт 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 / логинов / паролей в одном файле и хранить его на своем диске в зашифрованном виде.
Я нахожу это более удобным, чем «помощник по кэшированию», где вам нужно запомнить и ввести (один раз за сеанс) разные пароли для каждой из ваших удаленных служб, чтобы указанный пароль был кэширован в памяти.

40 голосов
/ 06 января 2014

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

https://user:password@github.com/...

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

Очевидный недостаток этого подходаявляется то, что вы должны хранить пароль в виде простого текста.Вы по-прежнему можете просто ввести имя пользователя (https://user@github.com/...), которое, по крайней мере, сэкономит вам половину хлопот.

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

39 голосов
/ 09 сентября 2015

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

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

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
37 голосов
/ 21 сентября 2016

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

git config credential.helper store

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

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

git-credential-store

22 голосов
/ 03 июля 2014

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

git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git

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

22 голосов
/ 05 октября 2012

Для меня не сразу было очевидно, что мне нужно сначала скачать помощника! Я нашел загрузку 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
19 голосов
/ 05 декабря 2012

В настройках GNU / Linux ~ / .netrc тоже работает довольно хорошо:

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

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

16 голосов
/ 24 мая 2014

Для 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 при аутентификации на любом сервере.

...