有没有办法让Git记住WebDAV远程库的密码?

59

我正在使用Git将更改推送到通过HTTP / WebDAV共享的存储库,每次访问HTTP远程操作时,Git都会提示输入密码。有没有办法使Git缓存密码/使远程服务器无需提示我?

远程Web服务器应该是Apache,并且可能需要重新配置。

3个回答

63

可以使用在Git文档的第3步中提到的~/.netrc方法:

然后,在$ HOME / .netrc文件中添加以下内容(可以不添加,但是需要 很多次 输入密码):

machine <servername>
login <username>
password <password>

...并设置权限:

chmod 600 ~/.netrc

更新:

从git 1.7.9开始,使用本地凭证助手API似乎是最好的选择。Git带有明文凭证存储或一个不太方便但更安全的临时凭证缓存。也可以使用第三方凭证助手。目前我知道的有一个针对本机Windows凭证存储的助手一个与OS X keychain集成的助手。(由Homebrew提供的Git构建版中有一个二进制文件,其他OS X Git发行版可能也有。Github还提供了一个独立的二进制文件。)

通常,仅需设置一次凭证助手即可:

git config --global credential.helper wincred

或者你可以使用适合你平台的任何助手,而不是 wincred。(如果助手可执行文件的名称为 git-credential-wincred,那么你设置选项的值将是 wincred 等等)

凭据助手还支持需要针对同一主机上的不同存储库具有单��的凭据集的需求。


7
不要在Git的URL中包含用户名,否则Git将不会查看~/.netrc文件。请注意保持原意并使翻译通俗易懂。 - robinst
1
WTF,这意味着所有远程仓库都使用同一个密码? - Oleg Mihailik
1
Git似乎没有内部实现任何形式的身份验证,而是依赖于传输提供程序来处理此问题。无论是用于HTTP传输的libcurl还是用于“git”传输的openssh都不知道Git存储库,这使得每个存储库的身份验证变得不可能。(但是,使用gitosis或大多数git托管服务可以实现每个存储库的授权。) - millimoose
回答 @OlegMihailik 的问题:当使用HTTP时,Git针对每个远程“机器”使用一组登录/密码对,用于该机器上的所有存储库。如果使用SSH,您可以通过将每个存储库添加到~/.ssh/config中的一个主机条目来规避此限制。 - millimoose
我不确定 ~/.netrc 中的 servername 是什么。但是无论如何,“github.com” 对于 github.com 存储库都有效。 - Joonho Park
@JoonhoPark 整个 ~/.netrc 的事情现在(谢天谢地)已经过时了,现在每个操作系统都可以直接集成本地凭据管理,非常方便。 - millimoose

37

在您的版本库中运行此命令:

git config credential.helper store

然后只需将其推送到服务器:

git push

你用来推送到服务器的凭证将会被保存在~/.git-credentials中。

这里的指令来自于这篇指南


最好和最简单的方式 - nebulabox
1
同意nebulabox和sidhi的观点...我不知道为什么这个问题的投票数这么少。 - user4805123
对我没有用。它又问了同样的问题。 - Sanan Ali
@SananAli OMA!第一个和我同名的人,也有同样的问题:( - user13944038

17

为什么不能在远程url中直接使用密码?

$ git config remote.origin.url = http://username:password@origin_link.com/repository.git

1
如果您需要在同一主机上的两个存储库中拥有不同的用户名/密码,则这似乎是一个不错的选择。(缺点是至少我更有可能确保〜/ .netrc不是全局可读,而不是在每个.git / config上这样做) - millimoose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接