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

问题描述 投票:166回答:4

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

windows git authentication
4个回答
192
投票

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

是的:您必须:

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

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://[email protected]/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(使用qazxsw poi)。 在Windows上:qazxsw poi(gpg,而不是'qazxsw poi')

添加了与%HOME%/_netrc文件交互的_(在.中)。

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

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

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

要启用此凭据帮助程序:

.netrc.gpg

(注意,Git会将“.authinfo”添加到帮助程序名称并在路径中查找它。)

.netrc

查看“git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2' ”的完整示例


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

参见# 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.netrc(2018年5月12日)。 (commit 786ef50于2018年5月30日在commit f07eeed合并)

Luis Marsano (``):接受Junio C Hamano -- gitster --选项

无论gpg.program选项如何,commit 017b7c5都用'git-credential-netrc'硬编码解密。 这是像Debian这样的分布上的问题,它将现代GnuPG称为其他东西,比如'gpg'


34
投票

您还可以安装git-credential-netrc以在Windows凭据管理器而不是gpg中保存Git密码。这是一种更安全的密码存储方式。


9
投票

这将让Git使用gpg2在HTTPS上进行身份验证:

  • 该文件应命名为Git Credential Manager for Windows,位于_netrc
  • 您需要设置一个名为.netrc的环境变量(使用控制面板中的System选项设置系统范围的环境变量。根据Windows的版本,您可能需要选择“Advanced Options”。)。
  • 存储在_netrc文件中的密码不能包含空格(引用密码不起作用)。

1
投票

我发布了一种使用c:\Users\<username>从网站www.course.com下载资料的方法。

如果有人打算使用coursera-dl在www.coursera.com上下载开放级资料,那么在Windows操作系统上,有人想要使用类似“Unix操作系统”中的“.netrc”这样的文件来添加为方便起见,选择HOME=%USERPROFILE%而不是_netrc。他/她可以这样做:

  1. 检查Windows操作系统上的主路径:_netrc(请参阅-n)。它会将-U <username> -P <password>环境变量保存为setx HOME %USERPROFILE%
  2. 找到目录VonC's answer并创建一个文件名HOME.NOTE:没有任何后缀。内容如下:C:\Users\"username"
  3. 使用C:\Users\"username"之类的命令下载课程资料。更多关于_netrc的coursera-dl选项详细信息。
© www.soinside.com 2019 - 2024. All rights reserved.