当我使用Git通过HTTP和用户名 - 密码克隆远程仓库时,是否可以在Windows上使用.netrc文件?
当我使用Git通过HTTP和用户名 - 密码克隆远程仓库时,是否可以在Windows上使用.netrc文件?
有没有可能在Windows上使用.netrc
文件?
可以:你需要:
%HOME%
(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协议”。
然而,我回答说curl
使用netrc
,并且适用于HTTP协议,如此示例所示(在页面中查找“netrc
”): 。这里也与HTTP协议一起使用:"_netrc
/.netrc
alternative to cURL
".
netrc
在 Windows 上的一个常见陷阱是,如果 origin 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.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-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程序。
请参见commit 786ef50,commit f07eeed(由Luis 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
”。
您还可以安装Git Credential Manager for Windows,将Git密码保存在Windows凭据管理器中,而不是_netrc
文件中。这是一种更安全的存储密码的方式。
.netrc
文件中。在会话期间,您甚至不需要输入这些凭证一次。 - VonC这将允许Git使用.netrc
进行HTTPS身份验证:
_netrc
,位于c:\Users\<username>
中。HOME=%USERPROFILE%
的环境变量(使用控制面板中的系统选项设置系统级环境变量。根据Windows的版本,您可能需要选择“高级选项”)。_netrc
文件中的密码不能包含空格(引用密码也不起作用)。我正在发布一种使用_netrc
从网站www.course.com下载材料的方法。
如果有人要使用coursera-dl下载www.coursera.com上的公开课材料,并且在Windows操作系统上,某人想要使用类Unix操作系统中的文件".netrc"来添加选项-n
而不是-U <username> -P <password>
以方便使用。他/她可以这样做:
%HOME%
目录下使用一个加密的_netrc
文件,就像 这个答案 中所描述的那样。顺便说一句,你的问题是一个 Stack Overflow 的问题,而不是程序员问答网站的问题。 - VonCHOME
的定义,但在当前CMD中键入set HOME
时没有看到它,那么您需要打开一个新的CMD,以便该shell会话继承您定义的变量。 - VonC