前言

在使用Git进行开发的时候,我们可以使用ssh url或者http url来进行源码的clone/push/pull,二者的区别是,使用ssh url需要在本地配置ssh key,这也就意味着你必须是开发者或者有一定的权限,每次的代码同步(主要是push和clone)不需要进行用户名和密码的输入操作;那么http url就相对宽松些,但是需要在每次同步操作输入用户名和密码,有时候,为了省去每次都输入密码的重复操作,我们可以在本地新建一个文件,来存储你的用户名和密码,只需要在第一次clone输入用户名和密码,这些信息就被存储起来,以后就可以自动读取,不需要你在手动输入了。
在Git官网介绍了这一实现,是通过叫做credential helper的小玩意儿实现的。可以把它叫做证书或者凭证小助手,它帮我们存储了credential(凭证,里面包含了用户名和密码),点击查看官方介绍。下面是我根据官网介绍进行的简单的翻译。如果不想搞明白原理,或者觉得我的翻译比较渣,可以直接跳到最后的实践去看实际操作。

基本介绍

Git有时需要从用户读取证书来执行某些操作,例如,有时可能会向用户索要用户名和密码去通过Http协议访问远程的仓库,下面是Git在寻找证书时候的机制,这和某些时候避免重复输入密码的特点一样。

当没有任何的证书小助手(credential helpers)定义的时候,Git将会按照如下的策略检查,并请求用户输入用户名和密码
GIT_ASKPASS环境变量
core.askPass配置
SSH_ASKPASS配置
上述都没有。最终直接要求用户在terminal输入密码

要求用户一次次重复地输入密码证书是十分笨的逻辑,Git提供了两种方法来减少这种情况:
1.在给定的认证环境中静态地配置用户名(这种方式还没研究过)
2.凭据(credential)帮助缓存或者存储密码,或者和系统交互获得密码(password wallet or keychain)
第一种方式比较简单合适,如果你并没有一个密码的安全存储地,一般在config中加入下面的语句:
[credential “https://example.com“]
username = me
第二种方式使用Credential helpers。Credentials helpers是一种外置的程序代码,Git可以从那里取得用户名和密码。credentials helpers通常和操作系统或者其他程序提供的安全存储交互。
为了使用helper,你必须首先选择一个使用。Git现在包含了如下的两个helper:

  • Cache

cache 将凭据在内存中进行短时间的缓存,点击查看详情

  • Store

store 将凭据保存在磁盘上,点击查看详情
当然你也可能有第三方的helper,在git help -a的输出中使用 credential-*进行搜索,并且参考每个helper的文档。一旦你选择了一个helper,你可以通过把helper的name放到credentials.helper的变量中来告诉Git使用哪个helper。
例如寻找一个helper
git help −a|grep credential−foo查看介绍 git help credential-foo

通知Git使用某个helper
$ git config --global  credential.helper foo
如果在credential.helper的配置变量中有多个实例,Git会轮流尝试他们,这个过程中,可能会提供用户名,用户密码,或者什么都没有。一旦Git同时取得了用户名和用户密码,Git不再会尝试其他helper。
如果credential.helper被设置为空字符串,这会把helper列表重置为空,这也就是说,你可以通过配置空的字符串helper,并在后面接上你想要的任何helper来覆盖一个helper set。

凭据上下文环境

Git认为每个凭据通过URL定义了各自的上下文环境。这个环境被用来关联环境配置,并且被传给了任何一位helper,这样也许可以使用这个环境作为安全存储的索引。
例如,假设我们要访问http://example.com/foo.git。当Git在config文件查询是否有一个部分符合这个环境。如果上下文环境是一个config文件里配置pattern更为详细的子集,那么就认为这两个是匹配的。例如,如果你在你的config文件中有如下 :
[credential “https://example.com“]
username = foo
然后,我们认为下述条件是匹配的:当传入的URL和上述定义协议一致,主机名一致,并且模式URL并不关心路径的组成。然而这种context并不会匹配:
[credential “https://kernel.org“]
username = foo
因为主机名不匹配。这种情况如“foo.example.com”也不会匹配Git会很精确地匹配主机名,并且不会考虑两个主机名是否是同一个域(domain)。类似的,当config 配置为”http://example.com“也不会匹配,因为协议不一样。

credential配置选项
credential context的配置选项可以被配置为 credential.来应用到全部的credential,或者配置为credential..,这样url会匹配之前讲到的context。
下面的是一些配置选项
helper
username
一个默认的用户名,当在URL中没有提供用户名时使用
useHttpPath
默认的,在使用外置的helpers时,Git并不把path考虑在匹配的范畴,也就是说”https://example.com/foo.git“的凭证也适用与”https://example.com/bar.git“,如果想要使用path来区分前面说过的两种情况,可以设置这个属性为true。
当然你也可以写自定义的helper

实践

先查看先查看我们系统支持哪种helper
git help -a | grep credential

cache是存储在内存中,可以设定有效时间但是时间过去后,将会失效;store是存储在磁盘上,不过用户名和密码是明文存储的,对于一般使用来说没太大差别,要是想加密存储,可是使用gnome-keyring来存储。这里我们选择使用store的方式。
设置credential helper
凭据可以设置为全局,也可以设置为仅仅在当前的项目下起作用。
如果想使用全局,则设置为:
git config –global credential.helper store –file=git_credentails.
如果仅仅设置当前项目有效,则进入项目代码目录下,运行:
git config credential.helper store –file=.git_credentails.
上面的–file=.git-credentials表示你的用户名密码存储的文件目录结构,即存放在哪里由你指定。
查看配置
如果你的凭证位置没有指定,则去用户目录下查看,发现多了一个.git_credentials文件,打开文件可以看到里面以明文存放你的用户名和密码(进行第四部分后才会有)。

然后在你的项目目录下运行指令
git config –list发现配置文件多了一项

我这里因为做测试重复了几次,所以有三个store,有一个就是正确的。

实例

在使用宇宙无敌最强版本管理 git 时, 如果使用 https 连接, 通常要求你输入 username & password.
那么如何可以不用每次都输入 username & password 呢?

  • 采用 SSH 连接方式

前提当然你得有权限将自己主机 id_rsa.pub 加入到 git 账户的 SSH Keys 中

  • 采用 HTTPS 连接方式

只要你有仓库访问权限即可, 使用本文即将介绍的 credential 来配置一下即可

配置 credential helper

1.创建文件 .git-credentials,

cd 到~/下, touch创建文件 .git-credentials, 用vim编辑此文件,输入内容格式:

[test@dev001 ~]$ touch .git-credentials

[test@dev001 ~]$ vim .git-credentials

在里面按“i”然后输入:https://{username}:{password}@gitlab.test.com/

先ESC退出

后:wq保存

比如 https://aoeddklj:1233ds@github.com

2. 在终端下执行

[test@dev001 ~]$ git config --global credential.helper store

可以看到~/.gitconfig文件,会多了一项:

[credential]helper = store

3.vim .gitconfig

name 和email 改成自己的

[credential]helper = store[push]default = simple[user]name = email = zxd@mail.test.com

这个时候输入命令git clone http://username@url 时不需要输入密码,即可完成代码的git

存储配置到本地 ~/.my-credentials 文件

git config --global credential.helper store --file ~/.my-credentials

下一次 git pull/git push 时, 输入的 username 和 password 将会被保存到 ~/.my-credentials 中;
以后再次 git pull/git push 将不再需要 username 和 password。

参考文章:https://blog.csdn.net/u012163684/article/details/52433645

Git credential helper 让你的 https不再需要输入用户名密码相关推荐

  1. git push/pull时总需要输入用户名密码的解决方案

    在提交项目代码或者拉代码的时候,git会让你输入用户名密码,解决方案:(我们公司用的是gitlab) 执行git config --global credential.helper store命令 然 ...

  2. linux系统下每次git pull输入用户名密码

    linux系统下每次git pull git push 都需要输入用户名密码 方式一 git配置 在用户家目录~生成.git-credentialsusername和password换成你自己的 ec ...

  3. git总是提示输入用户名密码的解决记录

    git总是提示输入用户名密码的解决记录 git改过密码后,再用命令行pull代码(举个例子),就会每次让你输入用户名密码,很麻烦,比如: git pull origin dev:dev 输入用户名密码 ...

  4. git 避免重复输入用户名密码问题解决

    "store" 模式会将凭证用明文的形式存放在磁盘中,并且永不过期. 这意味着除非你修改了你在 Git 服务器上的密码,否则你永远不需要再次输入你的凭证信息. 这种方式的缺点是你的 ...

  5. 解决git总是提示输入用户名密码

    git config --global credential.helper storegit config --global user.email "alice@aol.com" ...

  6. 解决 git pull/push 每次都要输入用户名密码的问题

    Windows解决 首先明确一点:出现这种问题的原因都是因为使用 http 的方式拉取代码才出现的,如下图所示: 出现上面这种情况 先按提示输入用户名和密码,接着执行 git config --glo ...

  7. 解决git@osc每次提交需要输入用户名密码的问题

    最近才折腾git,没有选用github,而是选用了国内的git@osc,没别的,骗了他们一顿匹萨吃,红薯不要打我. git@osc有两种提交方式HTTPS与SHH,博主就是在建仓库的时候没有选择SSH ...

  8. git 每次都要输入用户名密码_Git向GitHub提供代码

    一.前期准备工作 首先建立一个GitHub账号,这个账号和密码邮箱要记住,如果忘记了也可以找回,会麻烦一些. 在官网下载一个Git,可以自己根据默认进行安装,这样也是没有问题的,如果系统盘的空间不够大 ...

  9. 使用HTTPS方式向git托管网站推送项目时输错用户名密码

    如果在使用HTTPS方式向git托管网站推送项目时输错用户名密码,那么后面不会再弹出输入用户名密码的界面,直接报错误. 解决方法是 1.打开控制面板(快捷打开win+R,输入control): 2.点 ...

最新文章

  1. 急需降低系统复杂性,我们从 Kafka 迁移到了 Pulsar
  2. framebuffer小程序显示3个矩形 测试
  3. mongodb给我们提供了fsync+lock机制把数据暴力的刷到硬盘上
  4. 【ArcGIS风暴】ArcGIS 10.2字段计算器(Field Calculator)批量条件赋值用法总结
  5. vue数组中对象属性变化页面不渲染问题
  6. Web框架——Flask系列之Jinja2模板引擎(二)
  7. Linux 进程状态 说明
  8. python基础-菜鸟世界 -python基础---set
  9. python isinstance()方法的使用
  10. 变色龙引导安装黑苹果 遇到的问题的解决办法
  11. spring中创建excl表的几种方式并导出
  12. C语言学习(3)VScode配置C语言环境(简洁易懂版)
  13. 跑步戴哪款无线耳机好,适合跑步小白的无线耳机推荐
  14. 转帖:一生必读经典书籍大全,看看你读过几本?
  15. Tableau磁盘空间满清除临时文件
  16. Fastdfs数据迁移方案
  17. java 24字母_java 时间格式化中的模式字母
  18. 清华大学海洋大数据分析管理平台解读
  19. 解决前端css3使用transition刷新页面取消过渡显示
  20. 学习笔记(一)贝叶斯公式

热门文章

  1. 还记得当年陪你度过整个夏日的红白机吗?
  2. 皮一皮:真正的情侣服...一家人轮流穿...
  3. 因女友的一句话,他做了个10亿美元的App!网友评:万事俱备,就差个女友了~...
  4. 有比 ReadWriteLock更快的锁?
  5. 每日一皮:啥一文理解TCP和UDP的区别!这张图才是最屌的!
  6. 为什么将 0.1f 改为 0 会使性能降低 10 倍?
  7. 轻松高效玩转DTO(Data Transfer Object)
  8. mysql插入第一_mySQL教程 第5章 插入 更新与删除数据
  9. 辽宁师范大学计算机科学与技术在哪个校区,辽宁师范大学有几个校区及校区地址 哪个校区最好...
  10. GitLab代码回滚到特定版本