mac上git无法提交代码,险些让我头发掉光

1,049 阅读3分钟

问题

今天在mac电脑提交代码,由于代码库开启了规则校验,怎么都提交不上,检查规则也都是符合的,百思不得其解。

解决方案

经过一番冷静的思考,初步怀疑是git账号的问题,于是按照网上的教程查看

git config --list

结果里面连用户名密码都没有,更没有

credential.helper=osxkeychain

接着又查找~/.gitconfig文件,也没有发现对应的配置。

搜索了很久,还是无法解决,开始想重新安装git了,重新安装又很慢,于是继续查找清除方案,终于在github上面看到了。

github.com/ryancui92/b…

>>下面是正确的解决方法

$ git config --show-origin --get credential.helper
file:/usr/local/git/gitconfig    osxkeychain

通过vi打开/usr/local/git/gitconfig文件,发现了该配置信息,于是删除最后一行

credential.helper=osxkeychain

再次提交代码,成功了,老泪纵横。

然后会发现每次pull就会提示输入用户名,那么再设置一次保存密码就可以了。

git config --global credential.helper osxkeychain

知识点回顾

用了那么久的git,对于git凭据管理还是需要再回顾一下。

查看git官方对于凭据管理的解释:

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

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

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

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天