Git - 如何在Windows上使用.netrc文件来保存用户和密码

Ber*_*aus 168 windows git authentication

当我使用Git克隆带有HTTP和用户密码的远程存储库时,是否可以在Windows上使用.netrc文件?

Von*_*onC 195

是否可以.netrc在Windows上使用文件?

是的:您必须:

  • 定义环境变量%HOME%(Git 2.0之前,Git 2.0+不再需要)
  • _netrc文件放入%HOME%

如果您使用的是Windows 7/10,请在CMD会话中键入:

setx HOME %USERPROFILE%
Run Code Online (Sandbox Code Playgroud)

%HOME%将被设置为" C:\Users\"username"".
去那个文件夹(cd %HOME%)并创建一个名为' _netrc' 的文件

注:另外,对于Windows,你需要一个" _netrc"文件,不是一个" .netrc"文件.

其内容非常标准(替换为<examples>您的值):

machine <hostname1>
login <login1>
password <password1>
machine <hostname2>
login <login2>
password <password2>
Run Code Online (Sandbox Code Playgroud)

卢克在评论中提到:

在Windows 7上使用最新版本的msysgit,我不需要设置HOME环境变量.该_netrc文件单独的伎俩.

这确实是我在" 试着"中install.ssh提到的"github,dir not there ":
git-cmd.bat包含在msysgit中确实设置了%HOME%环境变量:

@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH%
@if not exist "%HOME%" @set HOME=%USERPROFILE%
Run Code Online (Sandbox Code Playgroud)

爱国者相信评论"它似乎不适用于http协议"

但是,我回答说,它netrc是由curlHTTP协议使用的,并且适用于HTTP协议,如本例所示(netrc在页面中查找' '):. 此处也与HTTP协议一起使用:" _netrc/ .netrc替代cURL ".


netrc在Windows 上支持的常见陷阱是,如果源https url指定用户名,git将绕过它.

例如,如果您的.git/config文件包含:

[remote "origin"]
     fetch = +refs/heads/*:refs/remotes/origin/*
     url = https://bob@code.google.com/p/my-project/

Git将无法通过_netrc修复此用户名来解析您的凭据,如下所示:

[remote "origin"]
     fetch = +refs/heads/*:refs/remotes/origin/*
     url = https://code.google.com/p/my-project/

替代方案:用Git版本1.7.9+(2012年1月):这个答案马克Longair详细介绍了凭据缓存机制,可以让你如下图所示明文存储密码.


使用Git 1.8.3(2013年4月):

您现在可以使用加密的.netrc(with gpg).
在Windows上:%HOME%/_netrc(_而不是' .")

添加了一个与文件交互的新的只读凭证帮助程序(in contrib/).netrc/.authinfo.

该脚本允许您使用gpg加密的netrc文件,避免将凭据存储在纯文本文件中.

具有.gpg扩展名的文件将在解析之前由GPG解密.
多个-f参数都可以.它们按顺序处理,找到的第一个匹配条目通过凭证帮助程序协议返回.

当没有-f给出选项,.authinfo.gpg,.netrc.gpg,.authinfo,和.netrc在你的主目录文件中的顺序使用.

要启用此凭据帮助程序:

git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'
Run Code Online (Sandbox Code Playgroud)

(请注意,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'
Run Code Online (Sandbox Code Playgroud)

看到一个完整的例子" 有没有办法跳过输入密码时,使用https:// github "


使用Git 2.18 +(2018年6月),您现在可以自定义用于解密加密.netrc文件的GPG程序.

Luis Marsano的提交786ef50,提交f07eeed(2018年5月12日)(``).
(由Junio C gitsterHamano合并- -提交017b7c5,2018年5月30日)

git-credential-netrc:接受gpg选项

git-credential-netrcgpg无论gpg.program选项如何,都被硬编码为' ' 解密.
这是像Debian这样的分布上的一个问题,它将现代GnuPG称为其他东西,比如' gpg2'


Kin*_*gon 34

您还可以安装Git Credential Manager for Windows以在Windows凭据管理器中保存Git密码,而不是_netrc.这是一种更安全的密码存储方式.

  • 很好的答案,这是我发现的唯一答案,让我保持用户名/密码的简单性(安全),而不必处理所有SSH废话. (8认同)

EBl*_*ake 9

这将让Git使用.netrc以下方式在HTTPS上进行身份验证:

  • 该文件应该被命名_netrc并位于c:\Users\<username>.
  • 您需要设置一个名为的环境变量HOME=%USERPROFILE%(使用控制面板中的"系统"选项设置系统范围的环境变量.根据Windows的版本,您可能需要选择"高级选项".).
  • 存储在_netrc文件中的密码不能包含空格(引用密码不起作用).