TLDR; Используйте зашифрованный файл netrc с Git 1.8.3+ .
Сохранение пароля для URL-адреса HTTPS хранилища 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
, вам нужно продублировать его.)
(Удостоверьтесь, чтобы поставить ключевую фразу к этому ключу.)
Доверься этому ключу
Установите вспомогательный сценарий учетных данных в каталоге внутри вашего %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.)
(Не забывайте ' protocol
' part: ' http
' или ' https
' в зависимости от того, какой URL вы будете использовать.)
(Теперь можно удалить в _netrc
файл, сохраняя только _netrc.gpg
зашифрованный один.)
(Обратите внимание на ' /
': C:\path\to...
вообще не будет работать.) (Вы можете сначала использовать, -v -d
чтобы увидеть, что происходит.)
С этого _netrc.gpg
момента любая команда Git, использующая URL-адрес HTTP (S), который требует аутентификации, будет расшифровывать этот файл и использовать логин / пароль, связанный с сервером, с которым вы связываетесь. В первый раз, GPG попросит вас ввести пароль вашего ключа GPG, чтобы расшифровать файл. В других случаях gpg-agent, автоматически запускаемый при первом вызове GPG, предоставит вам эту фразу-пароль.
Таким образом, вы можете запомнить несколько URL / логинов / паролей в одном файле и хранить их на своем диске в зашифрованном виде.
Я нахожу это более удобным, чем «помощник по кешированию», где вам нужно запомнить и ввести (один раз за сеанс) разные пароли для каждой из ваших удаленных служб, чтобы указанный пароль кэшировался в памяти.
В Git 2.26 (Q1 2020) пример помощника по .netrc
учетным данным для использования был обновлен для работы из коробки. Смотрите патч / обсуждение .
См. Коммит 6579d93 , коммит 1c78c78 (20 декабря 2019 г.) от Denton Liu ( Denton-L
) .
(Слиты Junio C Hamano - gitster
- в фиксации 1fd27f8 , 25 дек 2019)
Подписано: Дентон Лю
Путь к шебангу для интерпретатора Perl git-credential-netrc
был жестко закодирован.
Однако некоторые пользователи могут располагать его в другом месте и, следовательно, должны были бы вручную отредактировать скрипт.
Добавьте .perl
префикс к сценарию, чтобы обозначить его как шаблон и игнорировать созданную версию.
Дополните в Makefile
таким образом , что он создает git-credential-netrc
из git-credential-netrc.perl
, так же как и другие скрипты Perl.
Рецепты Makefile были бесстыдно украдены contrib/mw-to-git/Makefile
.
А также:
В версии 2.26 (первый квартал 2020 года) обновлен пример помощника по учетным данным для использования .netrc.
См. Коммит 6579d93 , коммит 1c78c78 (20 декабря 2019 г.) от Denton Liu ( Denton-L
) .
(Слиты Junio C Hamano - gitster
- в фиксации 1fd27f8 , 25 дек 2019)
Подписано: Дентон Лю
В настоящее время git-credential-netrc
не работает вне git-репозитория. Это терпит неудачу со следующей ошибкой:
fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
Тем не менее, нет никакой реальной причины, почему нужно быть в хранилище. Помощники по учетным данным должны иметь возможность нормально работать и вне хранилища.
Вызовите версию non-self, config()
чтобы git-credential-netrc
больше не нужно было запускать в репозитории.
Джефф Кинг ( peff
) добавляет:
Я предполагаю, что вы используете gpg-зашифрованный netrc
(если нет, то вы должны просто использовать credential-store
).
Для доступа по паролю "только для чтения" я считаю, что комбинация pass
с config выглядит немного лучше:
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"