TLDR; Użyj zaszyfrowanego pliku netrc z Git 1.8.3+ .
Zapisywanie hasła do adresu URL repozytorium Git HTTPS jest możliwe w systemie Windows ~/.netrc
(Unix) lub %HOME%/_netrc
(zwróć uwagę na _
).
Ale : ten plik przechowuje twoje hasło w postaci zwykłego tekstu.
Rozwiązanie : Zaszyfruj ten plik za pomocą GPG (GNU Privacy Guard) i każ Git odszyfrować go za każdym razem, gdy potrzebuje hasła (do operacji push
/ pull
/ fetch
/ clone
).
Uwaga: w Git 2.18 (Q2 2018) możesz teraz dostosować GPG używane do odszyfrowywania zaszyfrowanego .netrc
pliku.
Zobacz commit 786ef50 , commit f07eeed (12 maja 2018) autor: Luis Marsano (``) .
(Połączone przez Junio C Hamano - gitster
- w commit 017b7c5 , 30 maja 2018)
git-credential-netrc
: zaakceptuj gpg
opcję
git-credential-netrc
został zakodowany na stałe do odszyfrowania za pomocą „ gpg
” bez względu na opcję gpg.program.
Jest to problem związany z dystrybucjami takimi jak Debian, które nazywają współczesne GnuPG czymś innym, na przykład ' gpg2
'
Instrukcje krok po kroku dla systemu Windows
W systemie Windows:
(Git ma gpg.exe
w swojej dystrybucji, ale korzystanie z pełnej instalacji GPG obejmuje również gpg-agent.exe
, który zapamięta twoje hasło powiązane z twoim kluczem GPG.)
Zainstaluj gpg4Win Lite
minimalny interfejs wiersza polecenia gnupg (weź najnowszygpg4win-vanilla-2.X.Y-betaZZ.exe
) i uzupełnij ŚCIEŻKĘ katalogiem instalacyjnym GPG:
set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(Zwróć uwagę na copy
polecenie „: Git będzie potrzebował skryptu Bash, aby wykonać polecenie gpg
”. Ponieważ gpg4win-vanilla-2
jest dostarczany gpg2.exe
, musisz go zduplikować.)
(Pamiętaj, aby umieścić hasło do tego klucza.)
Ufaj temu kluczowi
Zainstaluj skrypt pomocnika poświadczeń w katalogu w %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
(Uwaga: nazwa skryptu została zmieniona w Git 2.25.x / 2.26, patrz poniżej)
(Tak, jest to skrypt Bash, ale będzie działał w systemie Windows, ponieważ zostanie wywołany przez Git.)
(Nie zapomnij „ protocol
”: „ http
” lub „ https
” w zależności od używanego adresu URL).
(Teraz można usunąć ten _netrc
plik, zachowując jedynie _netrc.gpg
zaszyfrowany jeden).
(Uwaga /
: „w C:\path\to...
ogóle nie działa.) (Możesz użyć na początku, -v -d
aby zobaczyć, co się dzieje).
Odtąd każde polecenie Git korzystające z adresu URL HTTP (S), które wymaga uwierzytelnienia, odszyfruje ten _netrc.gpg
plik i użyje loginu / hasła powiązanego z serwerem, z którym się kontaktujesz. Za pierwszym razem GPG poprosi o podanie hasła twojego klucza GPG, aby odszyfrować plik. Innym razem, gpg-agent uruchamiany automatycznie przez pierwsze połączenie GPG dostarczy Ci to hasło.
W ten sposób możesz zapamiętać kilka adresów URL / loginów / haseł w jednym pliku i przechowywać je na dysku zaszyfrowanym.
Uważam, że jest to wygodniejsze niż pomocnik „pamięci podręcznej”, w którym musisz zapamiętać i wpisać (raz na sesję) inne hasło dla każdej ze zdalnych usług, aby wspomniane hasło mogło być buforowane w pamięci.
W Git 2.26 (Q1 2020) przykładowy pomocnik poświadczeń użycia .netrc
został zaktualizowany, aby działał od razu po wyjęciu z pudełka. Zobacz łatkę / dyskusję .
Zobacz commit 6579d93 , commit 1c78c78 (20 grudnia 2019) autorstwa Denton Liu ( Denton-L
) .
(Połączone przez Junio C Hamano - gitster
- w commit 1fd27f8 , 25 grudnia 2019)
Podpisano: Denton Liu
Ścieżka shebang dla interpretera Perla git-credential-netrc
była na stałe zakodowana.
Jednak niektórzy użytkownicy mogą mieć go w innym miejscu i dlatego musieliby ręcznie edytować skrypt.
Dodaj .perl
przedrostek do skryptu, aby oznaczyć go jako szablon i zignoruj wygenerowaną wersję.
Powiększać się Makefile
tak, że generuje git-credential-netrc
od git-credential-netrc.perl
, podobnie jak innych skryptów Perl.
Przepisy Makefile zostały bezwstydnie skradzione contrib/mw-to-git/Makefile
.
I:
Wraz z wersją 2.26 (Q1 2020), przykładowy pomocnik poświadczeń do używania .netrc został zaktualizowany do pracy po wyjęciu z pudełka.
Zobacz commit 6579d93 , commit 1c78c78 (20 grudnia 2019) autorstwa Denton Liu ( Denton-L
) .
(Połączone przez Junio C Hamano - gitster
- w commit 1fd27f8 , 25 grudnia 2019)
Podpisano: Denton Liu
Obecnie git-credential-netrc
nie działa poza repozytorium git. Nie udaje się z powodu następującego błędu:
fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
Jednak nie ma żadnego rzeczywistego powodu, dla którego trzeba być w repozytorium. Pomocnicy poświadczeń powinni również dobrze działać poza repozytorium.
Wywołaj wersję inną niż self config()
, aby git-credential-netrc
nie trzeba było jej już uruchamiać w repozytorium.
Jeff King ( peff
) dodaje:
Zakładam, że używasz szyfrowanego gpg netrc
(jeśli nie, prawdopodobnie powinieneś po prostu użyć credential-store
).
W przypadku dostępu do hasła „tylko do odczytu” uważam, że takie połączenie pass
z konfiguracją jest nieco ładniejsze:
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"