一、HTTPS协议和SSH协议
Pycharm或VScode大多使用Git进行仓储管理。
HTTPS和SSH是Git的两种不同协议,认证方式也不同:
- 使用HTTPS协议时,Git会通过用户名和密码(或Personal Access Token)进行身份验证(如未正确配置凭据管理器,或Pycharm没有正确提示你输入凭据,可能会导致push失败)。
- 使用SSH协议时,Git会通过密钥对进行身份验证(如果已经配置了SSH密钥并将其添加到Github(或其他Git托管服务),SSH会自动使用密钥进行认证,无需手动输入用户名和密码)。
二、哪个更适合Pycharm,以及更方便呢?
SSH
原因如下:
- 如果你使用的是Github,Github已经不再支持通过密码进行HTTPS认证,必须使用Personal Access Token(PAT)。(如果没有正确配置PAT,HTTPS认证会失败);
- Pycharm可能没有正确缓存或提示你输入HTTPS的凭据(用户名和密码或PAT);
- SSH认证不依赖于Pycharm的凭据管理,只要你的SSH密钥配置正确,Pycharm可以直接使用它;
- 有些公司或网络环境可能会对HTTPS流量进行限制或代理,导致HTTPS协议无法正常工作,而SSH协议通常不受这些限制的影响
三、如何生成SSH密钥并添加到github
- 打开终端(windows上使用Git Bash或命令提示符)并运行如下命令:
ls ~/.ssh
如果看到id_rsa 和 id_rsa.pub(或者其他后缀为.pub的文件),说明已存在SSH密钥,可以直接跳到步骤4。
- 生成新的SSH密钥
1. 运行以下命令生成SSH密钥
-t rsa:使用RSA算法ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-b 4096:密钥长度为4096位
-C “your_email@example.com”:将你的github邮箱地址作为注释
运行期间遇到提示:
1. 按回车接受默认路径(~/.ssh/id_rsa)
2. 如果需要保护密钥,可以设置密码,也可以直接回车跳过。
2. 成功生成后,SSH密钥将保存在以下位置:
私钥:~/.ssh/id_rsa
公钥:~/.ssh/id_rsa.pub - 启动SSH代理并添加密钥
1. 启动SSH代理eval "$(ssh-agent -s)"
2. 添加私钥到代理:
ssh-add ~/.ssh/id_rsa
-
复制公钥到剪贴板
运行以下命令复制公钥clip < ~/.ssh/id_rsa.pub
-
添加公钥到Github
1. 登录到Github
2. 点击右上角头像,选择Settings
3. 在左侧菜单中选择SSH and GPG keys
4. 点击New SSH key
5. 在Title中输入一个描述(如“My work desktop”)
6. 将第四步复制到剪贴板的公钥粘贴到Key文本框中
7. 点击Add SSH key -
测试SSH连接
测试是否能成功连接Githubssh -T git@github.com
如果成功,会看到以下输出
Hi your_username! You've successfully authenticated, but Github does not provide shell access.
-
更新远程仓库的协议为SSH
1. 切换到你的项目所在的目录:cd path_t0_your_project
2. 将远程仓库URL更新为SSHgit remote set-url origin git@github.com:your_username/your_repository.git
3. 验证远程仓库地址git remote -v
应显示
origin git@github.com:your_username/your_repository.git (fetch) origin git@github.com:your_username/your_repositoty.git (push)
-
如果遇到 port 22: Soteware caused connection abort的错误提示,可能是网络屏蔽了端口22
22是SSH默认端口,443是SSH替代端口,所以,可以尝试编辑~/.ssh/config文件,并添加443端口nano ~/.ssh/config
添加如下内容: Host github.com Hostname ssh.github.com Port 443
测试SSH连接ssh -T git@github.com
如果成功,会看到步骤6的提示。
-
测试Git操作,试运行以下命令
git pull git push
如果在项目所在文件目录下运行,会提示
Already up to date.
或者push成功的提示
Enumerating objects: 28, done. Counting objects: 100% (28/28), done. Delta compression using up to 16 threads Compressing objects: 100% (19/19), done. Writing objects: 100% (20/20), 258.04 KiB | 892.00 KiB/s, done. Total 20 (delta 3), reused 0 (delta 0), pack-reused 0 (from 0) remote: Resolving deltas: 100% (3/3), completed with 2 local objects. To github.com:hawkchow2016/barcode_statistics_web.git 25f510d..d3ee4a3 main -> main
-
通过命令行提交代码,可以运行以下命令
git add . git commit -m "Your commit mesages" git push origin main
好了,我的代码和相关文件提交到Github远程仓库了,也祝你们好运~