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 .netrcpliku.
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 gpgopcję
git-credential-netrczostał 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.exew 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 Liteminimalny 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 copypolecenie „: Git będzie potrzebował skryptu Bash, aby wykonać polecenie gpg”. Ponieważ gpg4win-vanilla-2jest 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 _netrcplik, zachowując jedynie _netrc.gpgzaszyfrowany jeden).
(Uwaga /: „w C:\path\to...ogóle nie działa.) (Możesz użyć na początku, -v -daby zobaczyć, co się dzieje).
Odtąd każde polecenie Git korzystające z adresu URL HTTP (S), które wymaga uwierzytelnienia, odszyfruje ten _netrc.gpgplik 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 .netrczostał 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-netrcbyła na stałe zakodowana.
Jednak niektórzy użytkownicy mogą mieć go w innym miejscu i dlatego musieliby ręcznie edytować skrypt.
Dodaj .perlprzedrostek do skryptu, aby oznaczyć go jako szablon i zignoruj wygenerowaną wersję.
Powiększać się Makefiletak, że generuje git-credential-netrcod 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-netrcnie 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-netrcnie 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 passz konfiguracją jest nieco ładniejsze:
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"