关于git 凭证存储 credential helper配置 ,解决(git pull,push,fetch)remote not found的问题

昨天,我再次碰到了这个问题,今早上搞了一个半小时,各种查资料,最终在这篇文章https://stackoverflow.com/questions/15381198/remove-credentials-from-git中找到了解答方法;

首先先更正之前写的错误的地方;
不用git credential-manager uninstall全局删除然后安装 credential-manager,只需要单独配置credential.helper;使用–unset来删除单个credential.helper配置

//删除 manager配置
git config --global --unset credential.helper manager
//添加manager配置
git config --global  credential.helper manager

然后重新添加credential.helper配置,一般是store或者manager,两者皆可以以文件的形式存储用户名和密码;
当然你还可以全局更改config,通过命令git config --global -e,如下

git config --global -e

其实,这里只是全局设置credential存储配置,当我git pull的时候还是回报如下错误

git pull origin develop
remote: Not Found
fatal: repository 'http://10.110.10.10:11/XT/XT-QianDuan.git/' not found

最重要的原因是windows存储的初始密码账号不对,导致每次请求远程url都会报错,我们要到控制面板\用户帐户\凭据管理器中手动更改我们的credential凭证;如下,是我的凭证配置;只需要编辑下即可,当然你也可以删除你要请求的远程的凭证,我没试过,当你git pull,GIT会让你输入一次用户明和密码,以后每次请求,GIT会从windows凭证中查找;哈哈哈
在这里插入图片描述


此处是分割线


昨天不知怎么搞得,项目本地git bash一直连不上远程origin,一直在报错(图1),在网上看了一篇博客,要重新配置git 凭证存储,这里涉及到的知识就是git通过http或https的方式连接远程仓库时用户名和密码的记忆存储问题;

凭证存储

在使用Git进行开发的时候,我们可以使用ssh方式或者http url方式来进行源码的clone/push/pull,如果你使用的是 SSH 方式连接远端,并且设置了一个没有口令的密钥,这样就可以在不输入用户名和密码的情况下安全地传输数据。 然而,这对 HTTP 协议来说是不可能的 —— 每一个连接都是需要用户名和密码的。 这在使用双重认证的情况下会更麻烦,因为你需要输入一个随机生成并且毫无规律的 token 作为密码。

图1:
报错
幸运的是,Git 拥有一个凭证系统来处理这个事情。 下面有一些 Git 的选项:

  • 默认所有都不缓存。 每一次连接都会询问你的用户名和密码。
  • “cache”模式会将凭证存放在内存中一段时间。 密码永远不会被存储在磁盘中,并且在15分钟后从内存中清除。
  • “store” 模式会将凭证用明文的形式存放在磁盘中,并且永不过期。 这意味着除非你修改了你在 Git 服务器上的密码,否则你永远不需要再次输入你的凭证信息。 这种方式的缺点是你的密码是用明文的方式存放在你的 home 目录下。
  • 如果你使用的是 Mac,Git 还有一种 “osxkeychain”模式,它会将凭证缓存到你系统用户的钥匙串中。 这种方式将凭证存放在磁盘中,并且永不过期,但是是被加密的,这种加密方式与存放 HTTPS 凭证以及 Safari 的自动填写是相同的。
  • 如果你使用的是 Windows,你可以安装一个叫做“winstore”的辅助工具。 这和上面说的 “osxkeychain” 十分类似,但是是使用 Windows Credential Store 来控制敏感信息。 可以在 https://gitcredentialstore.codeplex.com 下载。

在配置之前,你需要解决图1的问题,下面就是解决方案,不要问我为什么这么解决,我也不太清楚,猜测是重新安装git credential工具,初始化credential helper的配置,有知道的朋友可以留言告诉我下,谢啦。

$ git credential-manager uninstall

$ git credential-manager install

然后我们使用git pull,push或者fetch就可以连接远程仓库,不过需要你重新输入远程仓库的用户名和密码,这时我们就需要配置 credential.helper,你可以设置 Git 的配置来选择上述的一种方式,如下

$ git config --global credential.helper cache

部分辅助工具有一些选项。 “store” 模式可以接受一个 --file 参数,可以自定义存放密码的文件路径(默认是 ~/.git-credentials)。 “cache” 模式有 --timeout 参数,可以设置后台进程的存活时间(默认是 “900”,也就是 15 分钟)。 下面是一个配置 “store” 模式自定义路径的例子:

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

Git 甚至允许你配置多个辅助工具。 当查找特定服务器的凭证时,Git 会按顺序查询,并且在找到第一个回答时停止查询。 当保存凭证时,Git 会将用户名和密码发送给 所有 配置列表中的辅助工具,它们会按自己的方式处理用户名和密码。 如果你在闪存上有一个凭证文件,但又希望在该闪存被拔出的情况下使用内存缓存来保存用户名密码,.gitconfig 配置文件如下:

[credential]
    helper = store --file /mnt/thumbdrive/.git-credentials
    helper = cache --timeout 30000

看到这里,我相信你会对git credential helper这个工具有些初步的了解,如果你还想了解更多内容,可以移步到git官网 Git 工具 - 凭证存储,里面有具体的底层实现原理。

你可能感兴趣的:(技术类,git)