我最近切换到将存储库同步到GitHub上的https://(由于防火墙问题),并且每次都要求输入密码。

有没有一种方法可以缓存凭据,而不是每次git push都进行身份验证?


#1楼

您还可以使用以下命令让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

#2楼

对我来说不是立即显而易见的,我需要先下载该助手! 我在Atlassian的Git储存库永久验证中找到了credential.helper下载。

引用:

如果要在OS X上将Git与凭据缓存一起使用,请按照以下步骤操作:

下载二进制git-credential-osxkeychain。

运行以下命令以确保二进制文件可执行:

chmod a+x git-credential-osxkeychain

将其放在目录/usr/local/bin

运行以下命令:

git config --global credential.helper osxkeychain

#3楼

在GNU / Linux设置上,〜/ .netrc也可以很好地工作:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

这可能取决于Git用于HTTPS传输的网络库。


#4楼

您可以使用凭据助手。

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

其中x是秒数。


#5楼

TLDR; 将加密的netrc文件与Git 1.8.3+一起使用

在Windows上,可以使用~/.netrc (Unix)或%HOME%/_netrc (请注意_ )为Git存储库HTTPS URL保存密码。

但是 :该文件将以纯文本格式存储您的密码。

解决方案 :使用GPG(GNU Privacy Guard)加密该文件,并使Git在每次需要密码时对其进行解密(用于push / pull / fetch / clone操作)。


注意:使用Git 2.18(2018年第二季度),您现在可以自定义用于解密加密的.netrc文件的GPG。

参见Luis Marsano的 commit 786ef50和f07ee (2018年5月12日) (``) 。
(由Junio C gitster - gitster在commit 017b7c5中合并 ,2018年5月30日)

git-credential-netrc :接受gpg选项

不管gpg.program选项如何, git-credential-netrc都使用' gpg '进行了硬编码解密。
这在像Debian这样的发行版上却存在问题,这些发行版将现代GnuPG称为“ gpg2


Windows的分步说明

使用Windows:

(Git的gpg.exe中有一个gpg.exe ,但是使用完整的GPG安装程序会包含一个gpg-agent.exe ,它将记住与GPG密钥关联的密码。)

  • 安装gpg4Win Lite (最小的gnupg命令行界面)(使用最新的gpg4win-vanilla-2.XY-betaZZ.exe ),并使用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-2gpg2.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 /登录名/密码存储在一个文件中,并将其加密存储在磁盘上。
我发现它比“缓存帮助器”更方便,在“缓存帮助器”中,您需要记住并为每个远程服务键入(每个会话一次)不同的密码,以便将所述密码缓存在内存中。


#6楼

有一种简单的老式方法将用户凭据存储在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客户端软件。


#7楼

我从gitcredentials(7)手册页中得到了答案。 就我而言,我的Windows安装中没有凭据缓存; 我使用凭证存储。

使用凭据存储后,用户名/密码存储在[用户文件夹] /。git-credentials文件中。 要删除用户名/密码,只需删除文件内容即可。


#8楼

对于Windows,您可以使用Git凭据管理器 (GCM)插件。 它目前由Microsoft维护。 令人高兴的是,它会将密码保存在Windows凭据存储中,而不是纯文本格式。

在项目的发行页面上有一个安装程序。 这还将安装带有内置凭据管理器的Windows版Git正式版。 它允许对GitHub(和其他服务器)进行两步验证 。 并具有用于初始登录的图形界面。

对于Cygwin用户(或已经使用Windows官方Git的用户),您可能更喜欢手动安装。 从发布页面下载zip软件包。 解压缩软件包,然后运行install.cmd文件。 这将安装到您的~/bin文件夹中。 (确保~/bin目录位于PATH中。)然后使用以下命令对其进行配置:

git config --global credential.helper manager

然后,当对任何服务器进行身份验证时,Git都会运行git-credential-manager.exe


#9楼

应该使用身份验证令牌代替帐户密码。 转到GitHub设置/应用程序,然后创建一个个人访问令牌。 可以使用与使用密码相同的方式使用令牌。

该令牌旨在允许用户不使用帐户密码进行项目工作。 仅在进行管理工作(例如创建新令牌或撤销旧令牌)时使用密码。


可以使用项目特定的部署密钥来授予对单个项目存储库的访问权限,而不是向用户授予对GitHub帐户的整体访问权限的令牌或密码。 当您仍然可以使用普通凭据访问其他Git帐户或项目时,可以将Git项目配置为在以下步骤中使用此不同的密钥:

  1. 编写一个SSH配置文件,其中包含Host ,部署密钥的IdentityFileUserKnownHostsFile以及User (尽管我认为您不需要它)。
  2. 编写一个实际上是ssh -F /path/to/your/config $*的SSH包装程序shell脚本
  3. 在常规的Git命令之前, GIT_SSH=/path/to/your/wrapper 。 这里的git remote (origin)必须使用git@github.com:user/project.git格式。

#10楼

撰写者文档提到您可以阻止它使用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上增加的负载,这应该是不得已的方法。


#11楼

只需将登录凭据作为URL的一部分:

git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git

注意:我不建议您使用此方法,但是如果您急于执行其他任何操作,则可以使用此方法。


#12楼

最好将凭据用于安全性,但是您可以使用缓存将其保留一段时间:

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

您的凭据将保存3600秒。


#13楼

如果您像我一样使用双重身份验证 ,则情况会有所不同。 由于在其他地方找不到很好的答案,因此我在这里贴一个,以便以后再找到。

如果您使用的是双重身份验证,则指定用户名/密码甚至都行不通-您将被拒绝访问。 但是您可以使用应用程序访问令牌,并使用Gi​​t的凭据帮助器为您缓存该令牌。 以下是相关链接:

  • 设置命令行以使用2因子身份验证 (搜索标题为“如何在命令行Git中工作”的部分)
  • 凭证缓存

而且我不记得我在哪里看到过这个信息,但是当系统要求您输入用户名时,即会在其中粘贴应用程序访问令牌。 然后将密码留空。 它适用于我的Mac。


#14楼

使用凭证存储。

对于OS XLinux上的Git 2.11+,请使用Git内置的凭据存储 :

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

#15楼

OAuth

您可以创建自己的个人API令牌 ( OAuth )并以与使用常规凭据相同的方式使用它(位于: /settings/tokens )。 例如:

git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork

.netrc

另一种方法是在~/.netrc (Windows上为_netrc )中配置用户/密码,例如

machine github.com
login USERNAME
password PASSWORD

对于HTTPS,添加额外的行:

protocol https

凭证助手

要在使用HTTPS时在Git中缓存GitHub密码 ,您可以使用凭据助手来告诉Git每次与GitHub对话时都要记住您的GitHub用户名和密码。

  • Mac: git config --global credential.helper osxkeychain (需要osxkeychain helper ),
  • Windows: git config --global credential.helper wincred
  • Linux和其他: git config --global credential.helper cache

有关:

  • 如何在终端钥匙串中的Linux上存储GitHub https密码?
  • 如何确保Git不询问我的GitHub用户名和密码?
  • 将Git客户端(例如GitHub for Windows)配置为不要求身份验证
  • 将本地存储库推送到具有双重身份验证的GitHub存储库

#16楼

这对我有效,我正在使用Windows 10

git config --global credential.helper wincred

#17楼

您还可以编辑bashrc文件并在其中添加脚本。

启动Git时,它将要求您输入一次密码,然后记住该密码,直到您注销为止。

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 succeededchmod 600 "${SSH_ENV}". "${SSH_ENV}" > /dev/null/usr/bin/ssh-add
}if [ -f "${SSH_ENV}" ]; then. "${SSH_ENV}" > /dev/nullps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {start_agent;}
elsestart_agent;
fi

#18楼

你可以用

git config credential.helper store

下次使用pull或push方式输入密码时,该密码将以纯文本格式存储在.git-credentials文件中(有点不安全,只是将其放入受保护的文件夹中)。

就是这样,如本页所述:

git-credential-store


#19楼

克隆存储库repo ,可以编辑repo/.git/config并添加如下配置:

[user]name = you_namepassword = you_password
[credential]helper = store

然后,将不再要求您usernamepassword


#20楼

我知道这不是一个安全的解决方案,但有时您只需要一个简单的解决方案-无需安装其他任何东西。 由于helper = store对我不起作用,因此我创建了一个虚拟助手:

创建一个脚本并将其放在用户bin文件夹中,该文件夹名为credfake ,该脚本将提供您的用户名和密码:

#!/bin/bash
while read line
doecho "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

使它可执行:

chmod u+x /home/mahuser/bin/credfake

然后在git中配置它:

git config --global credential.helper /home/mahuser/bin/credfake

(或仅将其与--global一起用于一个仓库)

和-voilá-git将使用该用户+密码。


#21楼

通常您有一个远程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)

#22楼

使用Git 1.7.9及更高版本

自Git 1.7.9(于2012年1月下旬发布)以来,Git中提供了一种简洁的机制,可避免始终为HTTP / HTTPS键入密码(称为凭据帮助程序) 。 (感谢dazonic在下面的评论中指出此新功能。)

使用Git 1.7.9或更高版本,您可以仅使用以下凭据帮助程序之一:

git config --global credential.helper cache

...告诉Git将密码保留在内存中的时间为15分钟(默认情况下)。 您可以使用以下方法设置更长的超时时间:

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

(在Linux的GitHub帮助页面中建议了该示例。)如果需要,您也可以永久存储凭据,请参见下面的其他答案。

GitHub的帮助还建议 ,如果您使用的是Mac OS X,并且使用Homebrew安装Git,则可以将本机Mac OS X密钥库与以下命令配合使用:

git config --global credential.helper osxkeychain

对于Windows, 在msysgit中有一个名为Windows的Git凭据管理器或wincred的帮助程序 。

git config --global credential.helper wincred # obsolete

使用适用于Windows 2.7.3+的Git (2016年3月):

git config --global credential.helper manager

对于Linux,可以使用gnome-keyring (或其他密钥环实现,例如KWallet)。

使用1.7.9之前的Git版本

在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目录中,这显然是不可取的。

使用任何Git版本(从0.99版本开始)

一种替代方法是将用户名和密码放在~/.netrc文件中,尽管与将密码保留在远程URL中一样,这意味着您的密码将以纯文本格式存储在磁盘上,因此安全性较低,并且不建议。 但是,如果要采用这种方法,请将以下行添加到~/.netrc

machine <hostname> login <username> password <password>

...将<hostname>替换为服务器的主机名,并将<username><password>替换为您的用户名和密码。 还请记住在该文件上设置限制性文件系统权限:

chmod 600 ~/.netrc

请注意,在Windows上,此文件应名为_netrc ,并且您可能需要定义%HOME%环境变量-有关更多详细信息,请参见:

  • Git-如何在Windows上使用.netrc文件保存用户和密码

#23楼

如果您不想像Mark所说的那样以明文形式存储密码,则可以使用与推送不同的GitHub URL进行获取。 在您的配置文件中的[remote "origin"]

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

推送时,它仍然会要求输入密码,而取回时,至少在开源项目中,它不会要求输入密码。

有没有一种方法可以缓存GitHub凭证来推送提交?相关推荐

  1. 有没有办法缓存 https 凭据以推送提交?

    问: 我最近切换到将我的存储库同步到 GitHub 上的 https://(由于防火墙问题),并且每次都要求输入密码. 有没有办法缓存凭据,而不是每次 git push 都进行身份验证? 答1: hu ...

  2. Visual Studio无法推送提交到Github的解决方法

    Visual Studio无法推送提交到Github的解决方法 参考文章: (1)Visual Studio无法推送提交到Github的解决方法 (2)https://www.cnblogs.com/ ...

  3. 【苹果家庭群发推送】软件安装Apple推送是一种基于IMESSAGE平台的新信息推送功效的营销软件

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息 作者推荐内容 2.相册 ...

  4. php psot传值_三种方法教你如何用PHP模拟post提交数据

    php模拟post传值在日常的工作中用到的不是很多,但是在某些特定的场合还是经常用到的. 下面,我整理了三种php模拟post传值的方法,file_get_contents.curl和socket. ...

  5. 都2021年了,还不会使用GitHub创建、推送、拉取、克隆远程库、团队协作开发?

    1 对自己的远程库操作 1.1 在GitHub上创建远程库 1.2 推送本地库至远程库 1.3 拉取远程库到本地库 1.4 克隆远程仓库到本地 2 对别人的远程库两种操作方式 2.1 使用GitHub ...

  6. python接口服务两种方式(被调用、主动推送)

    项目中用python开发,要对外接口时,根据场景不同,一般有两种方式: 外部调用python接口,返回数据 接口主动向外部推送数据 1外部调用python接口,返回数据 这种方式一般可以通过http接 ...

  7. Android程序一直吐司获取缓存记录失败 —— 极光推送

    问题: Android程序Toast提示 " 获取缓存记录失败 " ,看的很是别扭,而且想知道原因在哪里. 方案: 接入了极光推送所造成的原因. Android Studio双击S ...

  8. Python进阶之使用Scrapy实现自动登录Github的两种方法(POST,FormRequest,from_response)

    Python进阶之使用Scrapy实现自动登录Github的两种方法 1. 通过.FormRequest()实现登录github github1.py 2. 通过.FormRequest.from_r ...

  9. github下载加速三种方法

    第一种方法: 在github.com后面加  .cnpmjs.org 例如我现在要用git下载gorm项目  https://github.com/go-gorm/gorm 想要加速则使用指令  gi ...

最新文章

  1. 图像数据读取及数据扩增方法
  2. Git CMD - show: Show various types of objects
  3. 浅析session及小案例
  4. 总结libevent安装方法
  5. Windows 8 系列(九):关于VariableSizedWrapGrid与WrapGrid 对Visibility变化而引起的布局变化的支持...
  6. varnish 4.0 官方文档翻译17-Hashing
  7. 解决yolo+cudnn+opencv+gpu的一些问题
  8. 查询同一组的最大最小值及明细
  9. 您不是订单管理的定向开发者_全面升级投放和营销能力 华为应用市场商业推广助力开发者高效增长...
  10. 实用干货秘籍!最经典的10个Pandas数据查询案例,收藏!
  11. C# 使用Panel控件实现窗体嵌套
  12. jquery 如何获取某个元素中的第几个子元素
  13. 灵魂 我·将·归·来·开·放
  14. JavaScript适配移动端的移动元素方法
  15. 一名2012计算机应届毕业生的求职之路
  16. pdf和图像文字识别提取工具
  17. 广东某银行基于阿凡搭在信创环境下打造全行科技一体化服务平台
  18. Windows To Go入坑记录
  19. 学生HTML个人网页作业作品下载 个人主页博客网页设计制作 大学生个人网站作业模板 dreamweaver简单个人网页制作
  20. ubuntu小知识点--常用命令以及操作

热门文章

  1. Android Studio 代码注释插入图片
  2. Android 模拟Uart 串口通信
  3. LeakCanary 源码解析
  4. 奇葩问题解决-----解决异常情况下的黑屏
  5. Android 自定义光标样式
  6. 不怕面试再问 Activity,一次彻底地梳理(原理+生命周期)
  7. 设计模式之工厂方法模式学习笔记
  8. Swfit Array 遍历 map flatMap filter reduce
  9. 过滤输入内容中是否含有特殊字符与表情
  10. 学习excel的使用技巧一空格替换为0