Is there a way to cache GitHub credentials for pushing commits?
我最近转到了将我的存储库同步到github上的https://上(由于防火墙问题),它每次都要求输入密码。
是否有一种方法来缓存凭证,而不是每次
使用Git 1.7.9及更高版本
自Git1.7.9(2012年1月底发布)以来,Git中有一个整洁的机制,可以避免在HTTP/HTTPS(称为凭据帮助器)中一直输入密码。(感谢Dazoic在下面的评论中指出了这一新功能。)
使用Git 1.7.9或更高版本,您只需使用以下凭据帮助器之一:
1 | git config --global credential.helper cache |
…它告诉Git将密码缓存在内存中(默认情况下)15分钟。您可以设置更长的超时时间:
1 | git config --global credential.helper"cache --timeout=3600" |
号
(该示例在Linux的Github帮助页面中给出了建议。)如果需要,还可以永久存储凭据,请参阅下面的其他答案。
Github的帮助还建议,如果您使用Mac OS X并使用自制来安装Git,则可以使用本机Mac OS X密钥库:
1 | git config --global credential.helper osxkeychain |
对于Windows,有一个助手称为Git Credential Manager for Windows或Wincred in MSysGit。
1 | git config --global credential.helper wincred # obsolete |
。
使用Git for Windows 2.7.3+(2016年3月):
1 | git config --global credential.helper manager |
对于Linux,您可以使用
对于1.7.9之前的Git版本,此更安全的选项不可用,您需要更改您的
1 | https://you:[email protected]/you/example.git |
。
…换言之,在用户名后面和EDOCX1前面加上
您可以通过以下方式为您的
1 | git config remote.origin.url https://you:[email protected]/you/example.git |
。
确保使用
另一种方法是将您的用户名和密码放在您的
1 | machine <hostname> login <username> password <password> |
…用服务器的主机名替换
1 | chmod 600 ~/.netrc |
。
请注意,在Windows上,此文件应称为
- Git-如何在Windows上使用.netrc文件来保存用户和密码
您还可以让Git使用以下方法永久存储您的凭据:
1 | git config credential.helper store |
。
注意:虽然这很方便,但Git会将您的凭证以明文形式存储在项目目录下的本地文件(.git凭据)(请参阅下面的"主"目录)。如果不喜欢,请删除此文件并切换到使用缓存选项。
如果你想让Git在每次需要的时候都继续向你索取证书连接到远程存储库,可以运行以下命令:
1 | git config --unset credential.helper |
号
要将密码存储在
1 | git config --global credential.helper store |
号
使用源文件加密;在一次netrc Git +。
节电密码一个HTTPS URL的Git储存库可能是一个
我:那是密码文件存储在纯文本。
解决方案:一个加密文件GPG(GNU Privacy Guard),它可以让Git每次它需要一个密码(
注:一个Git 2.18(Q2 2018年),你现在可以自定义的GPG的加密用于解密
786ef50 commit(提交f07eeed湖,2018年12月)由路易斯marsano(``)。(出现在C -
git-credential-netrc : acceptgpg option
git-credential-netrc was hardcoded to decrypt with 'gpg ' regardless of
the gpg.program option.
This is a problem on distributions like Debian that call modern GnuPG something else, like 'gpg2 '
一步一步的指示Windows
一个窗口:
(
gpg4Win Lite 最小安装程序,命令行界面(把最新的和完整的gpg4win-vanilla-2.X.Y-betaZZ.exe ),在安装目录的路径:GPG1
2set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(注:"
创建或导入a GPG密钥,和信托它:
1
2
3gpgp --import aKey
# or
gpg --gen-key
(确保把密码密钥(认为)。
信任是关键
安装证书在您的脚本目录中生成一
%PATH% :1
2cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc
(是的,这是一个bash脚本,但它的工作在Windows,因为它会想通过Git的。)
创建一个文本文件中_ netrc清晰
1
2
3
4
5
6
7
8
9machine a_server.corp.com
login a_login
password a_password
protocol https
machine a_server2.corp.com
login a_login2
password a_password2
protocol https
不要忘了:"
加密的文件是:
1gpg -e -r a_recipient _netrc
(你现在可以删除只读文件的
这是使用加密的文件:
1git config --local credential.helper"netrc -f C:/path/to/_netrc.gpg -v"
(注:"
从现在,任何Git命令使用HTTP(S)的URL需要认证,是想
这样,你可以发现网址登录/密码/乐观,意志力,在一个文件,它存储在您的磁盘和一个加密的。
我找到它更方便比a"缓存"助手",你需要记住和型(一次通过一个不同的密码为每个会话的远程服务中心,说的内存缓存中的密码。
有简单的,老式的方式来存储用户凭据在HTTPS URL:
1 | https://user:[email protected]/... |
你可以改变一个
上的方法的缺点是,你在那一个位置存储在纯文本密码。你可以只输入用户名称(安静
你会喜欢到切换到SSH或使用GitHub的客户端软件。
使用凭证存储。
对于OS X和Linux上的Git 2.11+,请使用Git的内置凭证存储:
1 | git config --global credential.helper libsecret |
对于Windows上的msysgit 1.7.9+:
1 | git config --global credential.helper wincred |
。
对于OS X上的Git 1.7.9+,请使用:
1 | git config --global credential.helper osxkeychain |
。
你可以用
1 | git config credential.helper store |
。
下次用pull或push输入密码时,密码将存储在.git凭据为纯文本(有点不安全,但只将其放在受保护的文件夹中)
如本页所述:
https://git-scm.com/docs/git-credential-store
只需将登录凭据作为URL的一部分:
1 2 | git remote rm origin git remote add origin https://username:[email protected]/path/to/repo.git |
注意:我不推荐这个方法,但是如果你很匆忙,没有其他的方法,你可以使用这个方法。
我并没有立刻意识到我需要先下载助手!我在Atlassian的Git存储库永久验证中找到了credential.helper下载。
报价:
如果要在OS X上使用带有凭据缓存的Git,请执行以下步骤:
下载二进制git凭证osxkeychain。
运行以下命令以确保二进制文件是可执行的:
1 | chmod a+x git-credential-osxkeychain |
号
把它放在
运行以下命令:
1 | git config --global credential.helper osxkeychain |
在GNU / Linux的安装,A / Netrc很好作品太:
1 2 | $ cat ~/.netrc machine github.com login lot105 password howsyafather |
它可能在这取决于使用的网络库的Git是HTTPS传输。
对于Windows,您可以使用Git凭据管理器(GCM)插件。它目前由微软维护。好的是,它将密码保存在Windows凭据存储中,而不是以纯文本形式保存。
项目的"发布"页面上有一个安装程序。这还将安装内置凭据管理器的官方版本的Git for Windows。它允许对GitHub(和其他服务器)进行双因素身份验证。并且有一个最初登录的图形界面。
对于cygwin用户(或已经使用官方git for Windows的用户),您可能更喜欢手动安装。从发布页面下载zip包。提取包,然后运行
1 | git config --global credential.helper manager |
然后,当对任何服务器进行身份验证时,Git将运行
如果你不想像马克所说的那样以纯文本形式存储你的密码,你可以使用一个与推送不同的Github URL来获取密码。在您的配置文件中,在
1 2 | url = git://github.com/you/projectName.git pushurl = [email protected]:you/projectName.git |
它仍然会在推送时要求输入密码,但在获取时不会要求输入密码,至少对于开源项目是这样。
奥瑙
您可以创建自己的个人API令牌(OAuth),并使用它,就像使用普通凭据一样(位于:
1 2 | git remote add fork https://[email protected]/foo/bar git push fork |
江户十一〔一〕号
另一种方法是在
1 2 3 | machine github.com login USERNAME password PASSWORD |
号
对于https,添加额外的行:
1 | protocol https |
凭据帮助程序
要在使用HTTPS时在Git中缓存GitHub密码,可以使用凭据帮助器告诉Git在每次与GitHub对话时记住您的GitHub用户名和密码。
- mac:
git config --global credential.helper osxkeychain (要求osxkeychain helper ) - 窗口:
git config --global credential.helper wincred 。 - Linux及其他:
git config --global credential.helper cache 。
相关:
- 如何将Linux上的Github HTTPS密码存储在终端密钥链中?
- 如何确保Git不要求我输入GitHub用户名和密码?
- 配置Git客户机(如用于Windows的GitHub)以不请求身份验证
- 将本地回购推送到具有双因素认证的Github回购
你可以使用证书的助手。
1 | git config --global credential.helper 'cache --timeout=x' |
在
克隆
1 2 3 4 5 | [user] name = you_name password = you_password [credential] helper = store |
。
那么你就不会再被要求购买
我知道这不是一个安全的解决方案,但有时您只需要一个简单的解决方案—而不需要安装任何其他解决方案。由于helper=store对我不起作用,我创建了一个虚拟助手:
创建一个脚本,并将其放在用户bin文件夹中,此处名为credfeak,此脚本将提供您的用户名和密码:
1 2 3 4 5 6 7 | #!/bin/bash while read line do echo"$line" done <"/dev/stdin" echo username=mahuser echo password=MahSecret12345 |
使其可执行:
1 | chmod u+x /home/mahuser/bin/credfake |
。
然后在Git中配置它:
1 | git config --global credential.helper /home/mahuser/bin/credfake |
(或者不使用它——仅用于一个回购的全局)
和-voil_-git将使用此用户+密码。
应该使用身份验证令牌而不是帐户密码。转到Github设置/应用程序,然后创建个人访问令牌。令牌的使用方式与密码的使用方式相同。
令牌旨在允许用户不使用帐户密码进行项目工作。只有在执行管理工作(如创建新令牌或撤销旧令牌)时才使用密码。
可以使用特定于项目的部署密钥授予对单个项目存储库的访问权限,而不是授予用户对GitHub帐户的整个访问权限的令牌或密码。当您仍然可以使用普通凭据访问其他Git帐户或项目时,可以在以下步骤中将Git项目配置为使用此不同的密钥:
为了安全起见,最好使用凭据,但您可以使用缓存将其保留一段时间:
1 2 | git config --global credential.helper cache git config credential.helper 'cache --timeout=3600' |
。
您的凭据将保存3600秒。
如果像我一样使用双因素身份验证,情况会有所不同。因为我在别处找不到一个好答案,所以我会在这里留一个,以便以后能找到它。
如果您使用的是双因素身份验证,那么指定用户名/密码甚至不起作用-您将被拒绝访问。但您可以使用应用程序访问令牌,并使用Git的凭证帮助器为您缓存该令牌。以下是相关链接:
- 将命令行设置为使用2因子身份验证(搜索标题为"如何使用命令行git?"的部分)
- 凭据缓存
我不记得我在哪里看到的,但是当你被要求输入你的用户名时——那就是你贴应用访问令牌的地方。然后将密码留空。它在我的Mac上工作。
通常你有一个类似这样的远程URL,
1 2 3 4 | git remote -v origin https://gitlab.com/username/Repo.git (fetch) origin https://gitlab.com/username/Repo.git (push) |
。
如果要在使用
1 | git remote set-url origin https://username:[email protected]/username/Repo.git |
号
我刚刚将相同的URL(包含用户详细信息,包括密码)添加到了源站。
注意:如果用户名是电子邮件ID,则不起作用。
1 2 3 4 | git remote -v origin https://username:[email protected]/username/Repo.git (fetch) origin https://username:[email protected]/username/Repo.git (push) |
号
我得到了我的答案从gitcredentials(7)手册页。我的案例,我没有安装在我的Windows凭据缓存;我使用的凭据商店。
我使用的凭据商店后,用户名/密码是存储在用户的文件夹[ ]号文件.git -凭据。清除的用户名/密码,及时删除内容的文件。
我用的是Windows 10
1 | git config --global credential.helper wincred |
。
您还可以编辑bashrc文件并在其中添加脚本。
当您启动git时,这会要求您输入一次密码,然后记住它,直到您注销。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | SSH_ENV=$HOME/.ssh/environment ?? # Start the ssh-agent function start_agent { ????echo"Initializing new SSH agent..." ????# Spawn ssh-agent ????/usr/bin/ssh-agent | sed 's/^echo/#echo/' >"${SSH_ENV}" ????echo succeeded ????chmod 600"${SSH_ENV}" ????."${SSH_ENV}"> /dev/null ????/usr/bin/ssh-add } ?? if [ -f"${SSH_ENV}" ]; then ???? ."${SSH_ENV}"> /dev/null ?? ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { ??????start_agent; ??} else ????start_agent; fi |
composer文档提到您可以阻止它使用github API,因此它的作用类似于
If you set the
no-api key totrue on a GitHub repository it will clone the repository as it would with any other Git repository instead of using the GitHub API. But unlike using thegit driver directly, composer will still attempt to use GitHub's zip files.
号
所以这个部分应该是这样的:
1 2 3 4 5 6 7 | "repositories": [ { "type":"vcs", "no-api": true, "url":"https://github.com/your/repo" } ], |
号
请记住,API存在是有原因的。因此,这应该是Github.com上增加负载的最后手段。