6

这个要求可能很奇怪。但有时我真的需要这个功能。好的,事情就是这样,我总是在代理后面工作。无论是在办公室我使用的是corp代理,还是在家里我也使用VPN和代理(你知道,我在中国,所以我希望你能理解)。

通常我使用 git 协议连接 github 远程存储库,但是我很难在 git 协议后面设置代理,所以我决定使用以下命令切换回 http(s)

git remote set-url origin https://github.com/<username>/repo.git

git config http.proxy http://proxy:8080

它就像一个魅力。但是每当我连接到远程服务器时,git 都会询问用户名密码,例如拉/推。

我只有一个 github 帐户,我想节省一些打字,所以问题是如何避免每次我要推送时都输入 github 用户名。我可以接受输入我的密码,但我不想输入用户名。如何做到这一点?

4

3 回答 3

16

存储密码

您可以使用以下命令告诉 git 存储您的凭据:

git config --global credential.helper store

使用这种方法,你只需要输入一次用户名和密码,git 就不会再要求它了。但请注意,您的密码将以明文形式存储,这在安全性方面并不好。

缓存密码

您也可以使用缓存来代替,它会在您在会话中输入一次密码一段时间后存储您的密码。

git config --global credential.helper cache

这更安全,因为您的密码不会存储在磁盘上 - 只是暂时存储在内存中。如果您对默认设置不满意,您可以自己设置超时:

git config --global credential.helper 'cache --timeout=600'

再一次,这并不总是理想的。

SSH 代理 - 理想的解决方案

您真正应该使用的是ssh推送和拉取数据的协议。这将允许您使用您的私有 ssh 密钥来验证自己 - 这将由您的操作系统安装的密钥代理处理。这应该与代理一起工作而没有任何问题,所以你绝对应该试一试。

您可以通过如下设置远程 url 来进行设置:

git remote set-url origin git@github.com:<username>/<project>.git

如果您使用的是其他托管服务,例如 bitbucket,只需将“github.com”替换为您的提供商域即可。

一旦你这样做了,你将需要设置一个公钥和私钥对,用于 github 和你的计算机之间的通信。这里有一个很好的关于如何设置的教程。如果您使用的是 Linux 或 MacOSX,您只需在运行命令时按照这些步骤操作即可ssh-keygen

之后,您可以让 SSH 代理为您存储密码,这通常更安全。SSH 代理通常要求您在打开计算机后只输入一次密码 - 但之后它应该会自动为您完成所有操作。密码以这种方式安全存储,这与第一个以纯文本形式存储密码的解决方案不同。

您使用的 SSH 代理将取决于您的操作系统,但设置起来应该不难。对于大多数流行的 Linux 发行版,您不需要做任何事情,我在下面的评论中被告知您可以按如下方式设置 Windows:

git config --global credential.helper wincred

我从未使用过 MacOSX,所以我不能确定这是否像在基于 Ubuntu 的发行版中那样自动设置。

于 2013-09-07T11:55:27.250 回答
5

要完成Nevik评论,您可以更改现有 repo 的 url:

git remote set-url origin https://<username>@github.com/<username>/repo.git 

这将指定代理身份验证所需的用户名,让您输入密码。

我个人使用凭证助手(git1.8.3+)将我所有不同的凭证(GitHub、BitBucket、...)存储在加密的%HOME%\_netrc.gpg(Windows)或~/.netrc.gpg(Unix)中_netrc,而不是迈克尔回答中描述的内存缓存凭证助手.

在“配置 Git 客户端,例如 Windows 的 GitHub,不要求身份验证”中查看更多信息。

区别在于:

  • 使用内存缓存凭证助手,您必须记住您的 GitHub 密码
  • 使用 gpg netrc 凭证助手,您只需记住您的 gpg 密码,即可获得所有不同的凭证。

另外,如果您激活了 GitHub 双重身份验证,您将无法再使用常规的 GitGub 密码,但您需要一个“个人访问令牌”,它是一个 40 长的随机字符串。将其一劳永逸地存储在加密文件中的另一个理由,而不是每次会话都必须输入一次。

我刚刚描述的是 https url,在我看来,它仍然比 ssh url 更容易管理,它们的公共/私有 ssh 密钥需要密码保护,并且需要在 GitHub 帐户上发布(另一种每个工作站,因为您不应该重复使用 ssh 密钥)

于 2013-09-07T11:55:06.303 回答
4

这是节省一些输入的简单解决方案,您可以在 git bash 中轻松使用以下步骤..

(1) 创建远程仓库

git remote add origin https://{your_username}:{your_password}@github.com/{your_username}/repo.git

注意:如果您的密码包含“@”符号,请使用“%40”代替

(2) 然后对远程存储库做任何你想做的事情

ex:- git push origin master
于 2014-01-09T09:34:23.570 回答