本文共 8884 字,大约阅读时间需要 29 分钟。
我最近切换到将存储库同步到上的https://(由于防火墙问题),并且每次都要求输入密码。
有没有一种方法可以缓存凭据,而不是每次git push
都进行身份验证?
您还可以使用以下命令让Git永久存储您的凭据:
git config credential.helper store
注意:虽然这很方便,但是Git会将您的凭据以明文形式存储在项目目录(请参见下面的“主”目录)下的本地文件(.git-credentials)中。 如果您不喜欢这样做,请删除该文件并切换到使用缓存选项。
如果您希望Git每次需要连接到远程存储库时都继续要求您提供凭据,则可以运行以下命令:
git config --unset credential.helper
要将密码存储在%HOME%
目录(而不是项目目录)中的.git-credentials
中,请使用--global
标志
git config --global credential.helper store
对我来说不是立即显而易见的,我需要先下载该助手! 我在找到了credential.helper下载。
引用:
如果要在OS X上将Git与凭据缓存一起使用,请按照以下步骤操作:
下载二进制git-credential-osxkeychain。
运行以下命令以确保二进制文件可执行:
chmod a+x git-credential-osxkeychain
将其放在目录/usr/local/bin
。
运行以下命令:
git config --global credential.helper osxkeychain
在GNU / Linux设置上,〜/ .netrc也可以很好地工作:
$ cat ~/.netrcmachine github.com login lot105 password howsyafather
这可能取决于Git用于传输的网络库。
您可以使用凭据助手。
git config --global credential.helper 'cache --timeout=x'
其中x
是秒数。
在Windows上,可以使用~/.netrc
(Unix)或%HOME%/_netrc
(请注意_
)为Git存储库HTTPS URL保存密码。
但是 :该文件将以纯文本格式存储您的密码。
解决方案 :使用加密该文件,并使Git在每次需要密码时对其进行解密(用于push
/ pull
/ fetch
/ clone
操作)。
注意:使用Git 2.18(2018年第二季度),您现在可以自定义用于解密加密的.netrc
文件的GPG。
参见 和 (2018年5月12日) 。
(由在 ,2018年5月30日)
git-credential-netrc
:接受gpg
选项不管gpg.program选项如何,
这在像Debian这样的发行版上却存在问题,这些发行版将现代GnuPG称为“git-credential-netrc
都使用'gpg
'进行了硬编码解密。gpg2
”
使用Windows:
(Git的gpg.exe
中有一个gpg.exe
,但是使用完整的GPG安装程序会包含一个gpg-agent.exe
,它将记住与GPG密钥关联的密码。)
安装gpg4Win Lite
(最小的gnupg命令行界面)(使用 ),并使用GPG安装目录完成PATH:
set PATH=%PATH%:C:\\path\\to\\gpg copy C:\\path\\to\\gpg\\gpg2.exe C:\\path\\to\\gpg\\gpg.exe
(请注意' copy
'命令:Git将需要一个Bash脚本来执行命令' gpg
'。由于gpg4win-vanilla-2
随gpg2.exe
一起gpg2.exe
,因此您需要对其进行复制。)
创建或导入GPG密钥,并信任它:
gpgp --import aKey # or gpg --gen-key
(请确保在该密钥上输入密码。)
将凭证帮助程序脚本安装在%PATH%
内的目录中:
cd c:\\a\\fodler\\in\\your\\path curl -oc:\\prgs\\bin\\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc
(是的,这是一个Bash脚本,但是它会在Windows上运行,因为它会被Git调用。)
用明文制作一个_netrc文件
machine 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
(不要忘记“ protocol
”部分:“ http
”或“ https
”,具体取决于您要使用的URL。)
加密该文件:
gpg -e -r a_recipient _netrc
(您现在可以删除 _netrc
文件,只保留_netrc.gpg
加密的文件。)
使用该加密文件:
git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
(请注意,' /
': C:\\path\\to...
根本不起作用。)(您可以首先使用-v -d
来查看发生了什么。)
从现在开始,任何使用HTTP(S)URL且需要身份验证的Git命令都将解密_netrc.gpg
文件,并使用与您正在联系的服务器关联的登录名/密码。 GPG第一次会要求您提供GPG密钥的密码,以解密文件。 其他时间,第一个GPG调用会自动启动的gpg-agent将为您提供该密码。
这样,您可以将多个 URL /登录名/密码存储在一个文件中,并将其加密存储在磁盘上。
我发现它比“缓存帮助器”更方便,在“缓存帮助器”中,您需要记住并为每个远程服务键入(每个会话一次)不同的密码,以便将所述密码缓存在内存中。有一种简单的老式方法将用户凭据存储在HTTPS URL中:
https://user:password@github.com/...
您可以使用git remote set-url <remote-repo> <URL>
更改git remote set-url <remote-repo> <URL>
这种方法的明显缺点是必须将密码存储为纯文本格式。 您仍然可以只输入用户名( https://user@github.com/...
),这至少可以节省一半的麻烦。
您可能更喜欢切换到SSH或使用GitHub客户端软件。
我从得到了答案。 就我而言,我的Windows安装中没有凭据缓存; 我使用凭证存储。
使用凭据存储后,用户名/密码存储在[用户文件夹] /。git-credentials文件中。 要删除用户名/密码,只需删除文件内容即可。
对于Windows,您可以使用 (GCM)插件。 它目前由Microsoft维护。 令人高兴的是,它会将密码保存在Windows凭据存储中,而不是纯文本格式。
在项目的上有一个安装程序。 这还将安装带有内置凭据管理器的版正式版。 它允许对GitHub(和其他服务器)进行 。 并具有用于初始登录的图形界面。
对于Cygwin用户(或已经使用Windows官方Git的用户),您可能更喜欢手动安装。 从下载zip软件包。 解压缩软件包,然后运行install.cmd
文件。 这将安装到您的~/bin
文件夹中。 (确保~/bin
目录位于PATH中。)然后使用以下命令对其进行配置:
git config --global credential.helper manager
然后,当对任何服务器进行身份验证时,Git都会运行git-credential-manager.exe
。
应该使用身份验证令牌代替帐户密码。 转到GitHub设置/应用程序,然后创建一个个人访问令牌。 可以使用与使用密码相同的方式使用令牌。
该令牌旨在允许用户不使用帐户密码进行项目工作。 仅在进行管理工作(例如创建新令牌或撤销旧令牌)时使用密码。
可以使用项目特定的部署密钥来授予对单个项目存储库的访问权限,而不是向用户授予对GitHub帐户的整体访问权限的令牌或密码。 当您仍然可以使用普通凭据访问其他Git帐户或项目时,可以将Git项目配置为在以下步骤中使用此不同的密钥:
Host
,部署密钥的IdentityFile
, UserKnownHostsFile
以及User
(尽管我认为您不需要它)。 ssh -F /path/to/your/config $*
的SSH包装程序shell脚本 GIT_SSH=/path/to/your/wrapper
。 这里的git remote
(origin)必须使用git@github.com:user/project.git
格式。 撰写者文档您可以阻止它使用GitHub API,因此它的行为类似于git clone
:
如果您在GitHub存储库上将
no-api
键设置为true
,它将像使用其他任何Git存储库一样克隆存储库,而不是使用GitHub API。 但是与直接使用git
驱动程序不同,作曲家仍将尝试使用GitHub的zip文件。
因此,该部分如下所示:
"repositories": [ { "type": "vcs", "no-api": true, "url": "https://github.com/your/repo" }],
请记住,API在那里是有原因的。 因此,对于github.com上增加的负载,这应该是不得已的方法。
只需将登录凭据作为URL的一部分:
git remote rm origingit remote add origin https://username:mypassword@github.com/path/to/repo.git
注意:我不建议您使用此方法,但是如果您急于执行其他任何操作,则可以使用此方法。
最好将凭据用于安全性,但是您可以使用缓存将其保留一段时间:
git config --global credential.helper cachegit config credential.helper 'cache --timeout=3600'
您的凭据将保存3600秒。
如果您像我一样使用 ,则情况会有所不同。 由于在其他地方找不到很好的答案,因此我在这里贴一个,以便以后再找到。
如果您使用的是双重身份验证,则指定用户名/密码甚至都行不通-您将被拒绝访问。 但是您可以使用应用程序访问令牌,并使用Git的凭据帮助器为您缓存该令牌。 以下是相关链接:
而且我不记得我在哪里看到过这个信息,但是当系统要求您输入用户名时,即会在其中粘贴应用程序访问令牌。 然后将密码留空。 它适用于我的Mac。
使用凭证存储。
对于OS X和Linux上的Git 2.11+,请 :
git config --global credential.helper libsecret
对于Windows上的msysgit 1.7.9+:
git config --global credential.helper wincred
对于OS X上的Git 1.7.9+,请使用:
git config --global credential.helper osxkeychain
您可以创建自己的 ( )并以与使用常规凭据相同的方式使用它(位于: /settings/tokens
)。 例如:
git remote add fork https://4UTHT0KEN@github.com/foo/bargit push fork
.netrc
另一种方法是在~/.netrc
(Windows上为_netrc
)中配置用户/密码,例如
machine github.comlogin USERNAMEpassword PASSWORD
对于HTTPS,添加额外的行:
protocol https
要在使用HTTPS时 ,您可以使用凭据助手来告诉Git每次与GitHub对话时都要记住您的GitHub用户名和密码。
git config --global credential.helper osxkeychain
(需要osxkeychain helper
), git config --global credential.helper wincred
git config --global credential.helper cache
有关:
这对我有效,我正在使用Windows 10
git config --global credential.helper wincred
您还可以编辑bashrc文件并在其中添加脚本。
启动Git时,它将要求您输入一次密码,然后记住该密码,直到您注销为止。
SSH_ENV=$HOME/.ssh/environment # Start the ssh-agentfunction 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
你可以用
git config credential.helper store
下次使用pull或push方式输入密码时,该密码将以纯文本格式存储在.git-credentials文件中(有点不安全,只是将其放入受保护的文件夹中)。
就是这样,如本页所述:
克隆存储库repo
,可以编辑repo/.git/config
并添加如下配置:
[user] name = you_name password = you_password[credential] helper = store
然后,将不再要求您username
和password
。
我知道这不是一个安全的解决方案,但有时您只需要一个简单的解决方案-无需安装其他任何东西。 由于helper = store对我不起作用,因此我创建了一个虚拟助手:
创建一个脚本并将其放在用户bin文件夹中,该文件夹名为credfake ,该脚本将提供您的用户名和密码:
#!/bin/bashwhile read linedo echo "$line"done < "/dev/stdin"echo username=mahuserecho password=MahSecret12345
使它可执行:
chmod u+x /home/mahuser/bin/credfake
然后在git中配置它:
git config --global credential.helper /home/mahuser/bin/credfake
(或仅将其与--global一起用于一个仓库)
和-voilá-git将使用该用户+密码。
通常您有一个远程URL,像这样,
git remote -vorigin https://gitlab.com/username/Repo.git (fetch)origin https://gitlab.com/username/Repo.git (push)
如果要在使用git push
时跳过用户名和密码,请尝试以下操作:
git remote set-url origin https://username:password@gitlab.com/username/Repo.git
我刚刚在来源处添加了相同的URL(包括用户详细信息,包括密码)。
注意:如果用户名是电子邮件ID,则无法使用。
git remote -vorigin https://username:password@gitlab.com/username/Repo.git (fetch)origin https://username:password@gitlab.com/username/Repo.git (push)
自Git 1.7.9(于2012年1月下旬发布)以来,Git中提供了一种简洁的机制,可避免始终为HTTP / HTTPS键入密码(称为 。 (感谢在下面的评论中指出此新功能。)
使用Git 1.7.9或更高版本,您可以仅使用以下凭据帮助程序之一:
git config --global credential.helper cache
...告诉Git将密码保留在内存中的时间为15分钟(默认情况下)。 您可以使用以下方法设置更长的超时时间:
git config --global credential.helper "cache --timeout=3600"
(在的建议了该示例。)如果需要,您也可以永久存储凭据,请参见下面的其他答案。
GitHub的帮助 ,如果您使用的是Mac OS X,并且使用安装Git,则可以将本机Mac OS X密钥库与以下命令配合使用:
git config --global credential.helper osxkeychain
对于Windows, 有一个名为或 。
git config --global credential.helper wincred # obsolete
使用 (2016年3月):
git config --global credential.helper manager
对于Linux,可以 (或其他密钥环实现,例如KWallet)。
在1.7.9之前的Git版本中,此更安全的选项不可用,您需要以以下方式更改origin
远程使用的URL来包含密码:
https://you:password@github.com/you/example.git
...换句话说,在用户名之后@
之前使用:password
。
您可以使用以下方法为origin
远程站点设置新的URL:
git config remote.origin.url https://you:password@github.com/you/example.git
确保使用https
,并且应该注意,如果这样做,则GitHub密码将以纯文本.git
存储在.git
目录中,这显然是不可取的。
一种替代方法是将用户名和密码放在~/.netrc
文件中,尽管与将密码保留在远程URL中一样,这意味着您的密码将以纯文本格式存储在磁盘上,因此安全性较低,并且不建议。 但是,如果要采用这种方法,请将以下行添加到~/.netrc
:
machinelogin password
...将<hostname>
替换为服务器的主机名,并将<username>
和<password>
替换为您的用户名和密码。 还请记住在该文件上设置限制性文件系统权限:
chmod 600 ~/.netrc
请注意,在Windows上,此文件应名为_netrc
,并且您可能需要定义%HOME%环境变量-有关更多详细信息,请参见:
如果您不想像Mark所说的那样以明文形式存储密码,则可以使用与推送不同的GitHub URL进行获取。 在您的配置文件中的[remote "origin"]
:
url = git://github.com/you/projectName.gitpushurl = git@github.com:you/projectName.git
推送时,它仍然会要求输入密码,而取回时,至少在开源项目中,它不会要求输入密码。
转载地址:http://vvdnb.baihongyu.com/