@snownstone

连接 GitHub:SSH ☀️ HTTPS 🌦

Published on

问题

这几天从本地终端向 GitHub 远程仓库 push 总是失败,不会报错,就是行进到 95% 前后就停滞不前。一直想当然地以为是文件过大,还想着是不是仓库容量要超限了,所以 push 不动了。终于刚才去搜了一下,发现使用 SSH 协议就能解决问题。

诊断

命令中加入-- verbose 会返回更详细的 push 进展状况

然后看到返回 POST git-receive-pack (chunked)

网友说这是 Git 的一个 bug,当使用 HTTPS 协议发送的文件大过某个阈值后就会采用 chunked 编码,然后就看到一种解决方法是用 SSH 协议发送。

解决方法

官方指南在此

  • 使用 github 绑定邮箱新建 SSH keys,参考这里

    ssh-keygen -t ed25519 -C "your_email@example.com"
    

    返回询问保存文件直接回车用默认

    设置输入密钥密码

  • 将新生成的密钥添加到 ssh-agent

    eval "$(ssh-agent -s)"
    
    ssh-add ~/.ssh/id_ed25519
    
  • 打开密钥保存文件,复制里面的内容

    nano ~/.ssh/id_ed25519.pub
    

    可以把终端全屏显示,密钥共 80 个字符,以 ssh-rsa 开始,以绑定的邮箱结尾,终端内一行显示不完全也不会换行显示,一不小心复制的内容就不完整,最开始就因为这个在 GitHub 中报错密钥无效了。

  • 在 GitHub 个人设置里新建 SSH 密钥,将上一步复制的内容完整贴进去,参考这里

  • 测试与 GitHub 的连接,参考这里

    ssh -T git@github.com
    

    检查返回的 RSA 密钥指纹与这里的是否一致,一致输入 yes

  • 最后,添加某远程仓库对应的 ssh-url

    git remote set-url origin git@github.com:username/your_repo_gitname.git
    

其实很早之前 summerscar 看到我每次通过 HTTPS 输入用户名和密码 push 就跟我说过换用 SSH,可是因为懒一直没有研究,终于改了。