我想在GitExtensions、Sourcetree或任何其他GitGUI中自动使用推拉,每次都不需要在提示中输入用户名和密码。

那么我如何在Git中保存我的凭据?


当前回答

截至2021,HTTPS远程有一个安全、用户友好的跨平台解决方案。不再输入密码!不再有SSH密钥!不再有个人访问令牌!

安装GitHub开发的Git凭据管理器(下载)。它支持对GitHub、BitBucket、Azure和GitLab的无密码浏览器内OAuth认证。这意味着您可以在GitHub和其他平台上启用双因素身份验证,大大提高了帐户的安全性。

推送时,您可以选择身份验证方法:

> git push
Select an authentication method for 'https://github.com/':
  1. Web browser (default)
  2. Device code
  3. Personal access token
option (enter for default): 1
info: please complete authentication in your browser...

在Linux上,需要一点点设置。以下内容将凭据缓存在内存中20小时,因此您每天最多只能进行一次身份验证。

git-credential-manager-core configure
git config --global credential.credentialStore cache
git config --global credential.cacheoptions "--timeout 72000"

熟悉gnomekeyring或KWallet的高级用户可能更喜欢将凭证存储更改为libsecret。

外观配置(文档):

首选在终端而不是GUI中选择身份验证方法(点击次数较少)始终使用浏览器方法,而不是每次都被询问(甚至更少的按键)

git config --global credential.guiPrompt false
git config --global credential.gitHubAuthModes browser

其他回答

在浏览了数十篇StackOverflow文章、博客等之后,我尝试了每一种方法,这就是我想到的。它涵盖了一切。

普通的DevOps Git证书和私有包备忘单

这些都是在没有交互式密码提示的情况下安全验证Git以克隆存储库的所有方法和工具。

SSH公钥SSH-ASKPASSAPI访问令牌GIT_ASKPASS.gitconfig代替.gitconfig[凭据].git凭据.netrc文件私人套餐(免费)Node.js/npm包.jsonPython/pip/geggs requirements.txt红宝石宝石宝石文件转到.mod

银子弹

只想工作™? 这是神奇的银弹。

获取您的访问令牌(如果您需要GitHub或Gitea说明,请参阅备忘单中的部分),并将其设置在环境变量中(用于本地开发和部署):

MY_GIT_TOKEN=xxxxxxxxxxxxxxxx

对于GitHub,逐字复制并运行以下行:

git config --global url."https://api:$MY_GIT_TOKEN@github.com/".insteadOf "https://github.com/"
git config --global url."https://ssh:$MY_GIT_TOKEN@github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://git:$MY_GIT_TOKEN@github.com/".insteadOf "git@github.com:"

祝贺现在,无论是使用HTTPS还是SSH URL,任何自动克隆Git存储库的工具都不会受到密码提示的阻碍。

不使用GitHub?

对于其他平台(Gitea、GitHub和Bitbucket),只需更改URL即可。不要更改用户名(尽管是任意的,但不同的配置条目需要它们)。

兼容性

这在macOS、Linux、Windows(Bash)、Docker、CircleCI、Heroku、Akkeris等本地运行。

更多信息

请参阅备忘单的“.gitconfig insteadOf”部分。

安全

请参阅备忘单的“安全”部分。

除了编辑~/.gitconfig文件外,如果从命令行调用,还可以执行以下操作:

git config --local --edit

or

git config --global --edit

在默认文本编辑器中编辑git配置文件

您还可以使用命令行直接编辑git配置文件(无需编辑器)

git config --local user.name 'your username'
git config --local user.password 'your password'

or

git config --global user.name 'your username'
git config --global user.password 'your password'

请注意,始终使用单引号。如果您使用双引号,您的用户名和密码可能会使用一些会破坏密码的字符。

--local或--global表示为项目或OS用户保存配置参数。

全局保存用户名和密码:

git config --global user.name "fname lname"
git config --global user.email "example@gmail.com"
git config --global user.password "secret"

获取特定设置,

git config --global --get user.name
git config --global --get user.email
git config --global --get user.password

正在获取所有Git设置:

git config --list --show-origin

您可以使用gitconfig在git中启用凭据存储。

git config --global credential.helper store

运行此命令时,当您第一次从远程存储库中拉入或推送时,会询问您的用户名和密码。

之后,对于与远程存储库的后续通信,您不必提供用户名和密码。

存储格式为.git凭据文件,以明文形式存储。

此外,您还可以为git-configcredential.helper使用其他助手,即内存缓存:

git config credential.helper 'cache --timeout=<timeout>'

它采用可选的超时参数,确定凭证将在内存中保留多长时间。使用帮助器,凭据将永远不会接触磁盘,并且在指定的超时后将被擦除。默认值为900秒(15分钟)。


警告:如果使用此方法,您的Git帐户密码将以明文格式保存在global.gitconfig文件中,例如在Linux中,它将是/home/[用户名]/.gitconfig。

如果您不希望这样做,请为您的帐户使用ssh密钥。

如果您正在Windows上使用Git凭据管理器。。。

git-config-l应该显示:

credential.helper=manager

但是,如果没有提示您输入凭据,请执行以下步骤:

从“开始”菜单打开“控制面板”选择用户帐户在左侧菜单中选择管理凭据删除与Git或GitHub相关的任何凭据

如果您有代理并且Git服务器位于内部网络上,请确保您没有设置HTTP_PROXY、HTTPS_PROXY、NO_PROXY环境变量。

您还可以使用gitgui测试Git fetch/push/pull,gitgui链接到C:\Users\<username>\AppData\Local\Programs\Git\mingw64\libexec\Git-core中的凭据管理器二进制文件