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

时间:2011-05-17 13:08:41

标签: windows git authentication

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

4 个答案:

答案 0 :(得分:191)

  

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

是的:您必须:

  • 定义环境变量%HOME%(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>

Luke在评论中提及:

  

在Windows 7上使用最新版本的msysgit,我不需要设置HOME环境变量。仅_netrc文件就可以了。

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

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

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

但是,我回答netrc使用了curl,并且适用于HTTP协议,如this example所示(在页面中查找“netrc”) :。此处也与HTTP协议一起使用:“_netrc/.netrc alternative to cURL”。


在Windows上具有netrc支持的常见陷阱是,如果源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月):来自This answerMark Longair详细说明了credential cache mechanism 允许您以纯文本形式存储您的密码,如下所示。


Git 1.8.3(2013年4月):

您现在可以使用加密.netrc (使用gpg)。
在Windows上:%HOME%/_netrc_,而非“.”)

  

已添加 new read-only credential helper (在contrib/中)与.netrc/.authinfo文件进行互动。

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

  

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

     

如果未给出-f选项,则您的主目录中的.authinfo.gpg.netrc.gpg.authinfo.netrc文件将按此顺序使用。< / p>

启用此凭据帮助程序:

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'

请参阅“Is there a way to skip password typing when using https:// github

的完整示例

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

commit 786ef50commit f07eeedLuis Marsano (``)(2018年5月12日) (由Junio C Hamano -- gitster --合并于commit 017b7c5,2018年5月30日)

  

git-credential-netrc:接受gpg选项

     

git-credential-netrc被硬编码为“gpg”解密,无论如何   gpg.program选项。
  这是像Debian这样的分布上的问题,它将现代GnuPG称为其他内容,例如“gpg2

答案 1 :(得分:34)

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

答案 2 :(得分:9)

这将允许Git使用.netrc在HTTPS上进行身份验证:

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

答案 3 :(得分:1)

我发布了一种使用_netrc从网站www.course.com下载资料的方法。

如果有人打算使用该课程在www.coursera.com上下载开放课程的资料,那么在Windows操作系统上,有人想要使用像#34; .netrc&#34;这样的文件。为了方便起见,在类Unix操作系统中添加选项-n而不是-U <username> -P <password>。他/她可以这样做:

  1. 检查Windows操作系统上的主路径:setx HOME %USERPROFILE%(请参阅VonC's answer)。它会将HOME环境变量保存为C:\Users\"username"

  2. 找到目录C:\Users\"username"并创建文件名_netrc注意:没有任何后缀。 内容如下:machine coursera-dl login <user> password <pass>

  3. 使用coursera-dl -n --path PATH <course name>之类的命令下载课程资料。有关this page的更多课程选项详细信息。