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

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

140236 次浏览

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

是的,你必须:

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

如果你使用的是 Windows7/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文件就可以解决这个问题。

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

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

爱国者相信在评论中,“它似乎不会为 http 协议工作”

然而,我回答说,netrc是由 curl使用的,并且适用于 HTTP 协议,如 这个例子所示(在页面中查找‘ netrc’) : 。这里也与 HTTP 协议一起使用: “ ABC3/ABC4替代 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月) : 这个答案Mark Longair详细的 凭据缓存机制 还有允许你存储你的密码在明文如下所示。


Git 1.8合作(2013年4月) :

您现在可以使用 加密了 Netrc(与 gpg一起)。
在 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 将在 helper 名称前面加上“ 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 程序。

承诺786f50承认吧(2018年5月12日) by Luis Marsano (“)
(由 朱尼奥 · C · 哈马诺 gitster于2018年5月30日在 承诺017b7c5合并)

接受 gpg选项

无论如何,git-credential-netrc都被硬编码为用“ gpg”解密 程序选项。
对于 Debian 这样的发行版来说,这是一个问题,因为它们把现代 GnuPG 称为其他的东西,比如‘ gpg2

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

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

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

我张贴了一个方法使用 _netrc下载资料的网站 www.course.com。

如果有人打算使用 coursera-dl 下载 www.coursera.com 上的开放课程资料,而在 Windows 操作系统上,有人希望使用类似“。Netrc”,这是在类似 Unix 操作系统中添加选项 -n而不是 -U <username> -P <password>方便。他/她可以这样做:

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

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

  3. 使用像 coursera-dl -n --path PATH <course name>这样的命令下载课程资料。