Git - Як використовувати .netrc файл у Windows для збереження користувача та пароля


172

Чи можливо використовувати файл .netrc у Windows, коли я використовую Git для клонування віддаленого сховища з HTTP та паролем користувача?

Відповіді:


203

Чи можливо використовувати .netrcфайл у Windows?

Так: Ви повинні:

  • визначити змінну середовища %HOME%(pre-Git 2.0, більше не потрібен Git 2.0+)
  • помістити _netrcфайл%HOME%

Якщо ви використовуєте Windows 7/10, у CMDсеансі введіть:

setx HOME %USERPROFILE%

і %HOME%буде встановлено значення " C:\Users\"username"".
Перейдіть у цю папку ( cd %HOME%) та створіть файл під назвою " _netrc"

Примітка. Знову ж таки, для Windows вам потрібен файл ' _netrc', а не ' .netrc'.

Його вміст є цілком стандартним (замініть <examples>своїм значенням):

machine <hostname1>
login <login1>
password <password1>
machine <hostname2>
login <login2>
password <password2>

Лука згадує у коментарях:

Використовуючи останню версію msysgit в Windows 7, мені не потрібно було встановлювати HOMEзмінну середовища. Сам _netrcфайл зробив свою справу.

Це дійсно те, про що я згадував у " Спробах" install"github, .sshdir not there ":
git-cmd.batвключений у msysgit встановлює %HOME%змінну середовища:

@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH%
@if not exist "%HOME%" @set HOME=%USERPROFILE%

爱国者 вірить у коментарі, що "схоже, що це не буде працювати для протоколу http"

Однак я відповів, що netrcвикористовується curl, і працює для протоколу HTTP, як показано в цьому прикладі (шукайте ' netrc' на сторінці):. Тут також використовується протокол HTTP: " _netrc/ .netrcальтернативаcURL ".


Поширена пастка з netrcпідтримкою в Windows полягає в тому, що git обійде її, якщо URL-адреса https-походження визначає ім'я користувача.

Наприклад, якщо ваш .git/configфайл містить:

[віддалене "походження"]
     fetch = + refs / heads / *: refs / Remotes / origin / *
     url = https: //bob@code.google.com/p/my-project/

Git не вирішить ваші облікові дані через _netrc, щоб виправити це видалення вашого імені користувача, наприклад:

[віддалене "походження"]
     fetch = + refs / heads / *: refs / Remotes / origin / *
     url = https://code.google.com/p/my-project/

Альтернативне рішення: З версією git 1.7.9+ (січень 2012 р.): Ця відповідь від Марка Лонгайра детально описує механізм кешування облікових даних, який також дозволяє не зберігати пароль у простому тексті, як показано нижче.


З Git 1.8.3 (квітень 2013):

Тепер ви можете використовувати зашифрований .netrcgpg).
У Windows: %HOME%/_netrc( _, не ' .')

Додано новий помічник (лише contrib/) для ввімкнення даних для взаємодії з .netrc/.authinfoфайлами.

Цей сценарій дозволить вам використовувати зашифровані gpg файли netrc , уникаючи проблеми із збереженням облікових даних у простому текстовому файлі.

Файли з .gpgрозширенням будуть розшифровані GPG перед розбором.
Кілька -fаргументів добре. Вони обробляються в порядку, і перша знайдена відповідна запис повертається через протокол помічника даних.

Якщо немає -fопції не задана, .authinfo.gpg, .netrc.gpg, .authinfo, і .netrcфайли в вашому домашньому каталозі, використовуються в цьому порядку.

Щоб увімкнути цей помічник даних:

git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'

(Зверніть увагу, що Git додасть " git-credential-" ім'я помічника і шукатиме його на шляху.)

# and if you want lots of debugging info:
git config credential.helper '$shortname -f AUTHFILE -d'

#or to see the files opened and data found:
git config credential.helper '$shortname -f AUTHFILE -v'

Дивіться повний приклад на темуhttps:// github " Чи є спосіб пропустити введення пароля під час використання "


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

Див. Комісію 786ef50 , вчинити f07eeed (12 травня 2018 року) Луїса Марсано (``) .
(Об'єднано Хуніо С Хамано - gitster- у комітеті 017b7c5 , 30 травня 2018 року)

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

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


@Bernd: HOMEзмінна середовища є важливою, оскільки вона не визначена за замовчуванням у Windows. Ви можете встановити цю змінну в будь-який каталог, який ви хочете (це не повинно бути C:\users\mylogin): наприклад, на роботі я встановлюю її на свій приватний віддалений диск, пов’язаний з моїм обліковим записом Windows, що дозволяє мені перемикатися на настільних ПК без втрати мої .sshабо _netrcналаштування.
VonC

@Bernd: також перевірте, чи ваш Git repo знаходиться на локальній або WAN (Інтернет) сервері. Можливо, вам доведеться визначити http.proxyзмінні в оточенні. Або, навпаки, додати ваш сервер до no_proxyзмінної, щоб не намагатися отримати доступ до локального сервера через WAN.
VonC

Яку назву та значення має екологічна змінна? Не могли б ви бути трохи більш конкретними VonC
Dennis D

@DennisD: дві змінні середовища, про які я говорю у відповіді та коментарях, є HOME та http_proxy. ДОМАШНЯ посилання на будь-який каталог, який ви хочете. http_proxy посилатиметься на адресу проксі, якщо у вас є.
VonC

Використовуючи останню версію msysgitWindows 7, мені не потрібно було встановлювати HOMEзмінну середовища. Сам _netrcфайл зробив свою справу.
Лука

35

Ви також можете встановити Git Credential Manager для Windows, щоб зберегти паролі Git у менеджері облікових даних Windows замість _netrc. Це більш безпечний спосіб зберігання паролів.


8
Чудова відповідь, це єдина відповідь, яку я знайшов, що дозволяє мені зберігати простоту імені користувача / пароля (надійно), не маючи справи з усім цим лайном SSH.
Кірк Волл

@KirkWoll побачити мою відповідь оновлення вище: тепер ви можете зберігати свої дані в зашифрованому .netrcфайлі. Вам не доведеться вводити ці дані навіть один раз під час сеансу.
VonC

11

Це дозволить Git аутентифікуватись на HTTPS, використовуючи .netrc:

  • Файл повинен бути названий _netrcта розміщений у c:\Users\<username>.
  • Вам потрібно буде встановити змінну середовища, що називається HOME=%USERPROFILE%(встановити змінні середовища для всієї системи за допомогою параметра System на панелі керування. Залежно від версії Windows, можливо, вам доведеться вибрати "Додаткові параметри".).
  • Пароль, що зберігається у _netrcфайлі, не може містити пробілів (котирування пароля не буде працювати).

Найпростіше і найкраще рішення. Як шарм працював з Android Studio, Source Tree та командним рядком Git. Мені довелося скористатися цим, коли Google рекомендував варіант Cloud SDK credential.helper не вдався і довелося вручну генерувати облікові дані та використовувати з чистим файлом rc. У моєму випадку я не вимагав варіантів 2 та 3.
Харі

1

Я розміщую спосіб використання _netrcдля завантаження матеріалів з сайту www.course.com.

Якщо хтось збирається використовувати для курсу завантаження матеріалів відкритого класу на www.coursera.com, а в ОС Windows хтось хоче використовувати файл типу ".netrc", який знаходиться в операційній системі Like-Unix, щоб додати варіант -nзамість -U <username> -P <password>зручності. Він може зробити це так:

  1. Перевірте домашній шлях до ОС Windows: setx HOME %USERPROFILE%(див . Відповідь VonC ). Це збереже HOMEзмінну середовища як C:\Users\"username".

  2. Знайдіть у каталозі C:\Users\"username"та створіть ім’я файлу _netrc. ПРИМІТКА: суфікса НЕМАЄ. зміст виглядає так:machine coursera-dl login <user> password <pass>

  3. Використовуйте таку команду, як coursera-dl -n --path PATH <course name>скачати матеріали класу. Більше детальних варіантів курсу курсу-dl для цієї сторінки .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.