将git与gnome-keyring和http(s)仓库一起使用的正确方法是什么?


43

目前,每当我git pull还是git push一个HTTP(S)库,我得到如下:

$ git pull
Username for 'https://gitrepos.reposdomain.com': me@mydomain.com
Password for 'https://me@mydomain.com@gitrepos.reposdomain.com': 

偶尔使用是可以的,但是很快就变得非常烦人。 不幸的是,在这种情况下,不能切换到ssh。

我已经读到早期版本的git提供了凭据“ store”和“ cache”,但是不建议这样做,因为它以明文形式存储密码。

较新的版本git显然将git凭证存储在中gnome-keyring,但必须正确设置。

我已经尝试在SO上遵循其他(非Ubuntu)答案,以使其正常工作(即this),但是我仍然看到用户名和密码提示。

存储githttp(s)仓库的凭据的正确和最安全的方法是什么?如何使它们在Ubuntu上工作?


您应该提及尝试过的方法。否则,您可能会找到暗示确切答案的答案。
muru

@muru为什么删除我为可读性添加的重点?现在,这只是一小段文字,其将问题与其他问题区分开的原因和实际问题并不那么明显。
tu-Reinstate Monica-dor duh,2016年

用粗体斜体字显示的整个句子很难读懂。
muru

1
@muru,我希望与众不同。我发现粗体和斜体文本带出了问题的关键部分。
tu-Reinstate Monica-dor duh,2016年

Answers:


45

gnome-credential-helper 现在已弃用。

而是使用libsecret。如果您的ubuntu尚未内置,请使用以下过程:

  1. 您可以使用以下方法安装libsecret和开发库:

    sudo apt-get install libsecret-1-0 libsecret-1-dev

  2. 然后,您需要构建凭证管理器

    cd /usr/share/doc/git/contrib/credential/libsecret

    sudo make

  3. 最后,您应该将git指向配置中新创建的文件:

    git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

有关https://stackoverflow.com/a/40312117/2017781的更多详细信息


1
您可能要注意,该解决方案仅适用于git版本> = 2.11(然后可以在其中找到libsecret目录)
Charles Roberto Canato

1
这样安全吗?秘密存储在哪里?传输和存储都安全吗?有官方文件吗?显然,按照此页面此页面的说明,它位于“ Main”中,由Debian / Ubuntu维护。和:“这与‘特勤’通信使用的DBus。”

1
@caw:在GNOME中,“秘密服务”是相同的gnome-keyring-daemon,只是通过不同的API。(libsecret计划是允许其他DE建立支持相同API的自己的后端,例如,KDE计划在kwalletd中实现此后端。)
grawity

5
正在更新我的首选答案,因为我可以验证它在18.04上是否有效。:)
还原莫妮卡·多(Monica-dor duh)

44

您需要credential helper使用Gnome密钥环设置git :

安装并编译Gnome Keyring开发:

sudo apt-get install libgnome-keyring-dev
sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring

并设置凭据:

git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

真的很奇怪 从语义上讲,链接中的答案与该答案之间应该没有区别。但是由于某种原因,这个答案在其他地方不起作用。
tu-Reinstate Monica-dor duh's

然后正常运行git pushgit pull正常运行,并且第一次将其问到ansd存储,此后每次都会从密匙环获取它。要验证它,请运行seahorse。它应该在“密码”->“登录”下列出。
tu-Reinstate Monica-dor duh

@tudor真奇怪,我的答案和链接之一之间没有任何“概念上的”区别。很高兴能提供帮助。

对我来说似乎很奇怪,您仍然必须运行“ make”命令,但是这些步骤效果很好。谢谢!
DaveTheScientist

2

在我的git 2.17.1的Ubuntu 18.04.1上,这种简单的方法似乎足够了:

git config --global credential.helper cache

您可以指定一个小时(= 3600秒)的超时,如下所示:

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

进一步阅读精美的手册

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.