git push的时候没有权限问题的解决办法

这里主要说一下git的https链接无法交互的问题,我在编码(因为free,所以没用github)上创建了私有Repo之后根本无法push(私有Repo连克隆都不行),因为大神给的demo in和远程仓库交互的时候用的是https链接,为什么我也用https链接就不可以呢?
后来尝试使用ssh链接,然后重新配置公钥上传到coding.net上,就解决了和远端仓库交互的问题。可是换回https链接之后就不可以了(因为ssh链接会报防火墙的警告,虽然没什么大影响,但是我有病,非想试试https)。

如果Repo的链接是https的话,我总会得到这个错误:
这里写图片描述
unable to access ’ https://git.coding.net/xxxx/xxxx.git/ ‘: The requested URL returned error: 403
当然https肯定要输入用户名和密码的,它就是靠这个去校验的。我也想输入啊,可是系统不给我机会。后来随便在github上创建了公有库,让同事克隆下来,然后推,这个时候是需要他输入用户名和密码的。但是第一次输入密码后,就不会再提醒他再次输入了。显而易见是因为我的电脑缓存了我的github用户名和密码,所以才千万次的报403错误。
二,理解git用户名密码缓存原理
为了方便git使用https方式传输代码的时候不用每次都输入用户名和密码,所以一般git会储存用户的用户名。储存方式有缓存缓存,保存在硬盘存储,和保存在钥匙串osxkeychain中。

这篇文章翻译了git关于凭证的介绍,里面详细说明了git是如何寻找用户输入过的用户名和密码的,可以看一下明白git记录密码的原理。如果你不想看这篇文章,那么大概理解几个概念就好:

  1. git去找系统是否缓存了用户的密码有三种策略:去缓存中找,去磁盘中找,去钥匙串中找。
  2. /Users/xxx/.gitconfig文件中(这个文件如果没设置过git的全局配置可能会不存在),配置了git到底选择哪个策略去找用户名和密码。
    3.通过编辑.gitconfig文件,credential.helper = store / cache / osxkeychain来修改git缓存策略。

理解了上面的概念后可以执行这个命令查看自己系统支持的crendential(凭证),
这里写图片描述
git help -a | grep credential
得到结果:
这里写图片描述
然后可以执行
这里写图片描述
git config –list
查看自己电脑的git的全局配置,可以看到credential.helper =(你自己电脑的配置)
如果你转换到git项目的文件夹里再使用git config –list可以看到对应项目的配置信息,红色是电脑的全局凭证配置,绿色的是当前git项目的凭证配置(可以多个)
这里写图片描述
三,解决问题
1.清空配置
知道了这些之后,再解决这个问题就简单了,既然git是依靠credential.helper配置去找用户名密码,那我直接不用这个配置不就要求重新输入用户名和密码了吗?打开/ Users / xxx /.gitconfig文件,如果显示隐藏文件后还是找不到这个文件,那么可以使用以下任意的命令,成功后会在你的主路径下出现这个文件,
这里写图片描述
执行这些命令后就能生成.gitconfig配置文件,然后文本编辑器打开.gitconfig文件,清除里面的命令行生成的内容。

如果你的电脑本来就有.gitconfig文件,找到下面这句话删除,保存退出。
这里写图片描述
这个时候输入命令
这里写图片描述
查看本机的凭证是否已经被清空。

如果输入了git config credential.helper命令之后还是出现了osxkeychain,store或者cache等,说明git的配置还是没有被清空,我参考了stackOverFlow上这个问题有人给了这样一个命令查看credential.helper所在的文件目录(可能一个电脑上有多个的.gitconfig文件),
这里写图片描述
如果你的苹果上还有Xcode中的话,那么Xcode的中还会有一个的.gitconfig文件,找出他然后打开,清空[凭证。
再次输入
这里写图片描述
git config credential.helper
如果没有任何反应,那么凭证就是已经清空了,这个时候你无论在任何依托git的代码托管网站上推都都要求你输入用户名和密码了,而且每次都会要求你输入,是不是又有新的烦恼了呢?

2.重新配置
理解了git保存密码的原理,那我们可以按照自己的想法设置了,如上所述,可以设置成cache,store,keychain,这里我说下保存在磁盘中(store)和钥匙串中(keychain)两种方式。
配置成店
命令
这里写图片描述
git config –global credential.helper store
或者/Users/xxx/.gitconfig打开.gitsonfig直接修改文件credential.helper =存储
这里写图片描述
然后第一次推送的时候会提示输入用户名密码,输入完成之后/ Users / xxx /文件夹下会生成一个新的文件.git-credentials,双击打开,里面保存了你的用户名密码等信息:
这里写图片描述
https://用户名:密码@网址
但是这种储存方式,在本地只会储存一个用户名和密码,例如我本地的.git的凭据文件的内容是
https://用户名1:密码1@git.coding.net
这里写图片描述
那我如果想推到github上,又要重新输入用户名密码,你可以再次在.git-credentials文件中添加一个url,格式是一样的,这次的用户名和密码改成你的github用户名和密码

https://用户名2:密码2@github.com

注意:如果在设置成全球商店之前/用户/ xxx /文件夹中如果已经有了.git-credentials文件,最好先删除,防止系统自动去那里寻找用户名密码。

配置成osxkeychain
命令
这里写图片描述
git config –global credential.helper osxkeychain
也或者/Users/xxx/.gitconfig打开.gitconfig直接修改文件。

这个时候git是从你的钥匙串中访问存储的密码,同理如果第一次在钥匙串中没有找到用户名密码,则要求你输入,输入之后下次就不用再次输入啦。

与商店方式不同的是(你的每个平台用户名和密码都不一样):
假如第一次push到github,那么keychain记录了github的用户名密码,
第二次你想推送编码,那么keychain没有编码只是店的方式 我们需要手动添加url,这里不用了。

我们可以查看Mac上的钥匙串,推一次后就会新出一个对应网站的钥匙串,你也可以双击访问,查看密码。

注意:如果在/ Users / xxx /文件夹中已经有了.git-credentials文件,要先删除,否则系统自动去那里寻找用户名密码。

转载地址:https ://www.jianshu.com/p/77b0340a02f3

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值