21

我已经安装了 GitHub for Windows 和 GitExtensions,并且在我的路径中有多个版本的 git.exe。

在此处输入图像描述

C:\Users\Rajat\AppData\Local\GitHub\PortableGit_93e8418133eb85e81a81e5e19c272776524496c6\cmd\git.exe
C:\Users\Rajat\AppData\Local\GitHub\PortableGit_93e8418133eb85e81a81e5e19c272776524496c6\bin\git.exe
E:\cygwin\bin\git.exe
C:\Program Files (x86)\Git\cmd\git.exe
C:\Program Files (x86)\Git\bin\git.exe

现在,当我git push origin master使用最后三个git.exes 中的任何一个时,它会询问我的用户名。但是便携式 Git 不要求输入用户名。请参阅以下屏幕截图:

在此处输入图像描述

心形角色只是一个^C如此忽略的角色。

在这种情况下如何处理身份验证?最终,我希望最后三个 Git 不要求授权。这怎么可能?

我在 GitHub 的 Git 中发现了两个额外的文件,但我怀疑它们是否重要:

在此处输入图像描述

4

3 回答 3

52

如果你使用 GitHub for Windows,你需要做的就是:

  1. 确保您至少登录过一次 GUI 应用程序
  2. 单击“Git Shell”链接

GitHub 已经在命令行上为你解决了这个问题,包括基于 HTTPS 和 SSH 的远程

于 2014-04-11T19:44:09.703 回答
45

对于 GitHub for Windows 本身,Paul BettsGitHub 工作人员)温和地提醒大家,G4W 已经包含了一个凭证助手(基于CryptProtect和我想的CryptProtectData功能
请参阅下面的他的回答

对于那些不使用 G4W 的人,请继续阅读。


添加到我之前的答案(通过控制台/命令行推送到 GitHub 时):

~/.netrc(在 Unix 上)或%HOME%/_netrc(在 Windows 上)这样的文件可以帮助您避免在每次 git push 到 GitHub 时输入您的凭据

您可以在一个netrc文件中存储所需的任意数量的凭据。
(对于 GitHub 或其他 repo 托管服务提供商)
但是:

  • 你不想存储你的主 GitHub 密码帐户
  • 你不希望那些在纯文本文件中。

以下部分解决了这些问题:


在您的 GitHub 帐户上启用双重身份验证 (2FA)

(2013 年 9 月 3 日)

如果可以避免的话,通过应用程序配置 2FA,始终通过应用程序,永远不要通过短信。

原因是,通过该激活过程,您可以访问您的双因素密钥,它用于每 30 秒生成一次第二因素身份验证:

两因素秘密字符串

这样您就可以访问任何 GAuth ( Google Authenticator ) 客户端,输入相同的 2FA 密钥,并查看您通过 SMS 消息获得的完全相同的代码。
除此之外,如果您没有电话服务,它仍然可以工作;)

当然,第一个使用的客户端是您的 android 手机或 iphone 上的GAuth 。

Android 上的 GAuth

这意味着您不必等待短信,并且可以将 2FA 保存在手机上。

但是,拥有您的密钥可以让您不局限于手机上的客户端。
您可以访问任何其他客户,例如:

对于所有这些客户端(在您的手机上使用 GAuth,或者使用桌面客户​​端或网页),您将需要您的两因素密钥

如果您通过短信激活了 2FA:

  • 你不知道你的密钥
  • 您不能使用任何其他 GAuth 客户端
  • 您只能通过手机接收令牌(如果您有电话服务和/或如果您有手机)

注意:如果您在 Android 上的 Gauth 客户端中添加了密钥,而没有记住第一个密钥,则一切都不会丢失
(但你需要一部有根电话)

$ adb shell
# sqlite3 /data/data/com.google.android.apps.authenticator/databases/databases
sqlite> select * from accounts;
1|your@email.address|your2factorkey|0|0
sqlite> .quit
#exit

不要忘记获取并保存相关的恢复代码(在Account Settings您的 GitHub 帐户部分):

恢复代码

(另请参阅关于保存这些代码的位置的最后一节)


加密您的_netrc文件

(参见带有 git1.8.3+ 的凭证助手 netrc:gpg 加密)

您需要在该文件中至少加密这两个凭据:

machine github.com
login username
password xxxx
protocol https

machine gist.github.com
login username
password xxxx
protocol https

然后你只保留一个~/.netrc.gpg%HOME%/_netrc.gpg

但是,如果您启用上述新的双因素身份验证,“ xxxx”将不是您的 GitHub 帐户:请参阅下一节有关“个人访问令牌”的内容。


生成个人访问令牌

如果您已激活 2FA,您将无法使用您的 GitHub 密码进行推送。

Anonymous access to user/repo.git denied

这是您将看到的(gpg部分是因为我使用了netrc凭证助手):

C:\Users\VonC\prog\git\git>git push origin
Using GPG to open %HOME%/_netrc.gpg: [gpg2 --decrypt %HOME%/_netrc.gpg]

You need a passphrase to unlock the secret key for
user: "auser <email@email.com>"
2048-bit RSA key, ID A2EF56, created 2012-09-12 (main key ID DC43D6)

remote: Anonymous access to VonC/git.git denied.                      <=====
fatal: Authentication failed for 'https://VonC@github.com/VonC/git/'  <=====

因此,转到Developer您的 GitHub 帐户部分(子部分Personal access tokens),并生成个人访问令牌

个人代币

该令牌不需要双重身份验证:您可以将其用作_netrc文件中的密码,并且可以直接推送到 GitHub。

但与您的主 GitHub 帐户密码的区别在于:
您可以撤销个人访问令牌(并生成一个新的),同时仍保持主密码不变。

如果您在~/.netrc.gpg文件中加密了主 GitHub 密码,则可以将其替换为新的个人令牌:

gpg -d %HOME%\_netrc.gpg | sed "s/yourPassord/YourPersonalAccessToken/g" | gpg -e -r auser --yes -o %HOME%\_netrc.gpg

在多行中以提高可读性:

gpg -d %HOME%\_netrc.gpg | 
  sed "s/yourPassord/YourPersonalAccessToken/g" | 
  gpg -e -r auser --yes -o %HOME%\_netrc.gpg

借助类似 unix 的GoW(Windows 上的 Gnu)命令,这甚至在 Windows 上也有效,其中包括sed.


保存您的 GitHub 凭据

我推荐像lastpass.com这样的在线凭证存储

您需要保存:

  • 您的 GitHub 帐户密码
  • 您的 2FA 密钥
  • 您的 2FA 恢复代码
  • 您的个人令牌

最后通行证

于 2013-09-04T07:32:41.867 回答
13

https://help.github.com/articles/set-up-git

密码缓存部分说:

如果您不想使用 GitHub for Windows,可以在此处下载适用于您的操作系统的帮助程序:

这样做,任何其他 git.exe 都可以在不询问密码的情况下工作。:)

于 2013-01-12T12:29:54.913 回答