小编典典

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

all

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


阅读 98

收藏
2022-08-05

共1个答案

小编典典

.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仅文件就可以解决问题。

这确实是我在“尝试”中提到的“ installgithub,.sshdir notthere”: git-cmd.bat包含在msysgit中确实设置了%HOME%环境变量:

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

鐖卞浗?

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


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

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

[遥远的“起源”]
     fetch = +refs/heads/*:refs/remotes/origin/*
     网址 = https://bob@code.google.com/p/my-project/

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

[遥远的“起源”]
     fetch = +refs/heads/*:refs/remotes/origin/*
     网址 = https://code.google.com/p/my-project/

替代解决方案:使用 git 版本 1.7.9+ (2012 年 1 月):Mark
Longair的这个答案详细说明了
凭证缓存机制
它还 允许您
以纯文本形式存储密码,如下所示。


使用Git
1.8.3
(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 会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'

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

请参阅Luis Marsano (`)的](https://github.com/)[提交 786ef50](https://github.com/git/git/commit/786ef50a23cbd0e93d1e41982cfaba76801ed885)和[提交 f07eeed](https://github.com/git/git/commit/f07eeed123b8880b1723b1ea9d6d6f41cfb34532)(2018 年 5 月 12 日) 。(由[Junio C Hamano 合并 -- ](https://github.com/gitster)[\--](https://github.com/gitster)在[提交 017b7c5](https://github.com/git/git/commit/017b7c52fc00897c72f6c4808ded43c4c5f9c5b8)中,2018 年 5 月 30 日)[](https://github.com/) [gitster`

git-credential-netrc: 接受gpg选项

git-credential-netrc``gpg无论 gpg.program 选项如何,都被硬编码为使用 ‘ ‘ 解密。
这是像 Debian 这样的发行版上的一个问题,它把现代 GnuPG 称为别的东西,比如 ‘ gpg2

2022-08-05