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


Answers:


203

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

是:您必须:

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

路加在评论中提到:

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

这确实是我在“ 尝试“ install” github,.ssh目录不存在
git-cmd.bat中提到的内容:msysgit中包含的确设置了%HOME%环境变量:

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

爱国者相信以下评论:“看来它不适用于http协议”

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


netrcWindows 上具有支持的常见陷阱是,如果原始https url指定了用户名,则git将绕过它的使用。

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

[远程“来源”]
     提取= + refs / heads / *:refs / remotes / origin / *
     url = https://bob@code.google.com/p/my-project/

Git将不会通过解析您的凭据_netrc,以解决此问题,请删除您的用户名,如下所示:

[远程“来源”]
     提取= + 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(带有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'

(请注意,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年6月),您现在可以自定义用于解密加密.netrc文件的GPG程序。

参见Luis Marsano的commit 786ef50f07ee(2018年5月12日)(``)
(通过合并JUNIOÇ滨野- gitster-提交017b7c5,2018年5月30日)

git-credential-netrc:接受gpg选项

git-credential-netrcgpg无论使用gpg.program选项如何,都使用' ' 进行了硬编码以解密。
这在Debian之类的发行版中存在问题,该发行版将现代GnuPG称为“ gpg2'”


@Bernd:HOME环境变量很重要,因为在Windows上默认未定义。您可以将该变量设置为所需的任何目录(不必为C:\users\mylogin):例如,在工作中,我将其设置为与Windows帐户关联的私有远程磁盘,这使我可以切换桌面而不必丢失我的.ssh_netrc设置。
VonC

@Bernd:还检查您的Git存储库是否在LAN或WAN(互联网)服务器上。您可能需要http.proxy在环境变量中定义一个。或者相反,将服务器添加到no_proxy变量中,以避免尝试通过WAN访问LAN服务器。
VonC

环境变量的名称和值是什么?您能更具体地讲一下VonC吗?
Dennis D

@DennisD:我在答案和注释中谈到的两个环境变量是HOME和http_proxy。HOME将引用您想要的任何目录。如果您有http_proxy,它将引用代理地址。
VonC

使用msysgitWindows 7 的最新版本,我不需要设置HOME环境变量。该_netrc文件单独的伎俩。
路加福音

35

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


8
很好的答案,这是我发现的唯一答案,可以让我(安全地)保持用户名/密码的简单性,而不必处理所有SSH废话。
柯克·沃尔

@KirkWoll在上方看到我的更新答案:现在,您可以将凭据存储在加密.netrc文件中。您甚至无需在会话期间输入这些凭据。
VonC

11

这将使Git使用.netrc以下命令在HTTPS上进行身份验证:

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

最简单,最好的解决方案。在Android Studio,源代码树和Git命令行中就像魅力一样工作。当Google建议Cloud SDK credential.helper选项失败并不得不手动生成凭据并与net rc文件一起使用时,我不得不使用此选项。就我而言,我不需要选项2和
3。– Hari

1

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

如果有人要使用Coursera-dl在www.coursera.com上以及Windows操作系统上下载开放式资料,则有人要使用像Unix OS中的“ .netrc”之类的文件来添加选项-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>下载课程材料的命令。此页面的更多coursera-dl选项详细信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.