14

我想git send-mail用来向上游提交补丁,但我的 gmail 帐户使用的是两因素身份验证。谷歌为这样的事情提供了特定于应用程序的密码,但我的问题是在哪里可以安全地存储此密码以供 git send-mail 使用?

4

4 回答 4

7

原来 git 有一个 credential store。Linux、OS X 和 Windows 都有凭证助手,可以从操作系统的密钥环中收集凭证。这个答案有几个例子。

如果您希望将补丁保存到草稿文件夹中,以便在发送之前查看它(或者只是为了让 Gmail 更好地跟踪线程),您可以执行以下操作:

git config --global imap.host imaps://imap.gmail.com
git config --global imap.user your.email@gmail.com
git config --global imap.port 993
git config --global imap.sslverify false
git config --global imap.folder [Gmail]/Drafts
git format-patch --stdout | git imap-send

git-credentialgit-imap-send从 git 2.1.0 开始支持。

于 2014-04-26T05:35:53.057 回答
2

您可以使用普通的 Git 配置来存储密码,如下所示:

git config --global sendemail.smtpencryption tls
git config --global sendemail.smtpserver mail.example.com
git config --global sendemail.smtpuser fred@example.com
git config --global sendemail.smtpserverport 587
git config --global sendemail.smtppass smbumqjiurmqrywm

当然,这将以纯文本形式存储密码。你应该确保你的 ~/.gitconfig 文件不被其他人读取。

您还可以将密码存储在加密文件中并使用它。您仍然需要记住并输入加密密码,但至少您可以选择该密码。类似的东西gpg2应该可以解决问题。

当然,最后,唯一真正安全的存储密码的地方是在你的耳朵之间。

资源

于 2014-04-16T08:51:33.150 回答
2

Git 2.0.x/2.1(2014 年第三季度)将git credential支持git imap-send.
请参阅Dan Albert ( )的提交 791643a,现在合并到分支:DanAlbertgit/git master

imap-send:使用 git-credential

git-imap-send直接提示输入密码而不是使用git-credential. git-send-email,另一方面,支持git-credential

对于使用双重身份验证的用户来说,这是一项必要的改进,因为不应期望他们记住所有应用专用密码。


Git 2.14.x/2.15(2017 年第四季度)的 2017 年更新git imap-send仍将不断发展。

请参阅Nicolas Morey-Chaisemartin ( )的提交 dbba42b提交 19079b3提交 690307f提交 200bc38(2017 年 9 月 14 日) 。(由Junio C Hamano 合并 -- --提交 b67f154中,2017 年 9 月 25 日)nmorey
gitster

" git imap-send" 有我们自己的协议实现,也可以使用更新libCurlimap协议支持。
更新后者,使其可以使用凭证子系统,然后使其成为使用的默认选项,这样我们最终可以弃用并删除前者。


使用 Git 2.30.1(2021 年第一季度)git send-email更新了文档。

请参阅Vasyl Vavrychuk ( ) 的提交 155067a(2021 年 1 月 7 日(由Junio C Hamano 合并 -- --提交 788f488中,2021 年 1 月 15 日)vvavrychuk
gitster

git-send-email.txt: 提到使用 Gmail 的应用程序访问不太安全

签字人:Vasyl Vavrychuk
签字人:Denton Liu

谷歌可能已经改变了 Gmail 的安全性,如果没有两因素身份验证,现在需要明确启用不太安全的应用程序访问,否则发送电子邮件会失败,并显示:

5.7.8 Username and Password not accepted. Learn more at
5.7.8  https://support.google.com/mail/?p=BadCredentials

(谷歌:“我无法登录我的电子邮件客户端”)
记录完成这项工作所需的步骤。

[dl:清理提交消息并将建议合并到补丁中。]

git send-email现在在其手册页中包含:

如果您在 Gmail 帐户上设置了多重身份验证,您将

git send-email现在在其手册页中包含:

如果您没有在 Gmail 帐户上设置多重身份验证,则需要允许安全性较低的应用访问。访问 https://myaccount.google.com/lesssecureapps以启用它。

于 2014-07-26T20:17:15.037 回答
2

对于那些不想为此使用 Gmail 密码的人,我为 git-send-email 编写了一个使用 OAuth 2 授权的插件。它仅请求最低要求的权限(代表您发送电子邮件)并将 OAuth 令牌数据存储在 Windows 凭据存储中,就像 Git 凭据管理器一样。

更新:谷歌有一个插件,它以类似的方式工作,但将凭据保存在文件中,并使用较少限制的令牌(所有 Gmail 与仅代表您发送电子邮件)。它虽然适用于Linux。

于 2020-02-14T16:52:33.860 回答