git push 403解决

有时候啊计算机报错真是很扯~

如图 git错误图

前提还是我用nginx和gogs配置搭建的git服务,git clone 代码后git push 时报该错误,可以看到403 Forbidden,一般这种错误就是权限错误。

问题分析:

  1. 可能nginx没有权限写文件
    已是root用户运行,排除

  2. 可能gogs没有权限写文件
    其他仓库可以提交代码,排除

  3. git提交用户权限问题
    就是这个问题了。在虚拟机windows上clone之后可以push 成功,在mac OS 上一直push失败,判断是mac OS环境问题。

解决方案:

首先确保该项目你是否真的有被分配权限,如果没有,找项目管理员吧。

  1. 简单粗暴的办法,卸载git重装。
    扯淡的是macOS Sierra 依赖git,git不可被卸载。

  2. 修改配置
    git config -e查看git配置 git的全局配置可能不是项目的配置,则清空全局配置,重配项目本地配置
    git config --global --unset user.name
    git config --global --unset user.email
    git config user.name "your name"
    git config user.email "your email"

  3. 修改项目本地的git配置文件
    vim ~/project/.git/config 修改url = http://username@gitaddress.gitgit配置

  4. 修改git的身份文件
    这种方式是我的猜想,我没有试过。有可能用户执行过:
    git config credential.helper store

    git push http://example.com/repo.git
    Username: <type your username>
    Password: <type your password>

    此时在~/.git-credentials文件中会记录用户名和密码,形如http://username:password@host.com,有可能用户修改过密码,或者host对应的用户信息改变了等等操作,导致git push验证失败,此时删掉~/.git-credentials文件中的相关数据。

  5. 公私钥提交代码
    其实这种方式就是为了躲避上诉的问题,提交公钥到服务器上,用秘钥来提交代码,不过这种方式确实安全了很多。
    生成秘钥ssh-keygen -t rsa -C "your email"

    提交公钥方式1:拷贝本地.ssh/id_rsa.pub 到服务器~/.ssh/authorized_keys文件中

    提交公钥方式2:ssh-copy-id -i /path/to/id_rsa.pub git@my_server_ip