Windows 配置 SSH 密钥|本地项目推送 GitHub/Gitee/GitCode

一、前言

日常开发常用代码托管平台:海外GitHub、国内Gitee(码云)、GitCode。 三个平台 Git 底层逻辑一致,但 SSH 地址、部分交互细节略有区别。

本文实现一套通用流程: SSH 密钥生成 → 平台公钥配置 → 本地项目.gitignore编写 → Git 初始化 → 规范提交代码 → 推送远程仓库。

演示环境:Windows 11 专业版、Git 2.51.1

二、前置准备

  1. 安装 Git,推荐默认选项完成安装;
  2. 注册对应平台账号(GitHub / Gitee / GitCode);
  3. 在网页端新建远程仓库:

✅最佳实践:创建仓库不要勾选初始化 README、LICENSE,从根源规避推送冲突; ⚠️如果仓库已经自动生成 README,后文提供冲突解决方案。

三、步骤 1:生成 SSH 密钥 Ed25519 / RSA 选型(三大平台全部支持)

SSH 用于免密推送代码,避免每次输入账号密码。目前主流两种加密算法:

方案 1【优先推荐】Ed25519(椭圆曲线算法)

密钥更小、签名速度更快、安全性更高,GitHub/Gitee/GitCode 全部原生支持。

ssh-keygen -t ed25519 -C "你的邮箱"

方案 2【老旧设备兼容备选】RSA 4096

兼容极低版本 OpenSSH 设备,通用性最强

ssh-keygen -t rsa -b 4096 -C "你的邮箱"

RSA vs Ed25519 对比

特性RSA 4096Ed25519
算法类型大整数分解椭圆曲线密码
密钥长度4096bit256bit
生成速度较慢更快
平台支持全平台兼容新版 OpenSSH,主流代码平台支持

执行操作

运行命令后连续三次回车,不设置密钥密码。 生成目录:C:\Users\用户名\.ssh\

  • id_ed25519/id_rsa:私钥,绝对不能泄露
  • id_ed25519.pub/id_rsa.pub:公钥,记事本打开,完整复制所有内容

💡小技巧:同一套公钥,可以同时添加到 GitHub、Gitee、GitCode 三个平台,不用重复生成多组密钥!

四、步骤 2:三大平台分别配置公钥入口

1)GitHub

头像 → Settings → SSH and GPG keys → New SSH key 粘贴公钥,保存

2)Gitee(码云)

头像 → 设置 → SSH 公钥 → 添加公钥

3)GitCode

头像 → 设置 → SSH 密钥 → 添加公钥

五、连通性测试命令(区分平台)

# GitHub 测试 ssh -T git@github.com # Gitee 测试 ssh -T git@shturl.cc # GitCode 测试 ssh -T git@gitcode.com

首次连接提示:Are you sure you want to continue connecting ?输入yes回车,出现欢迎提示即代表 SSH 配置成功。

六、步骤 3:项目根目录配置 .gitignore

本次需求:保留 video 空文件夹,不上传内部视频;忽略临时文件、Python 缓存。 项目根目录新建.gitignore

Windows 直接新建文件报错时,文件名输入.gitignore.(末尾带小数点),系统自动修正。

# 保留video文件夹,忽略文件夹内部所有文件 video/* # Python缓存 __pycache__/ *.pyc *.pyo # 日志、临时文件 *.log *.tmp

验证忽略规则(推荐)

模拟推送,预览将要上传的文件,检验过滤规则是否生效

git add . --dry-run

七、步骤 4:本地仓库初始化 & 关联远程仓库

进入项目根目录执行:

git init

三大平台 SSH 地址格式对照

# GitHub git remote add origin git@github.com:用户名/仓库名.git # Gitee git remote add origin git@shturl.cc:用户名/仓库名.git # GitCode git remote add origin git@gitcode.com:用户名/仓库名.git

⚠️注意:不要混合使用 SSH 地址和 HTTPS 地址,配置 SSH 后全程使用 SSH 链接。

八、步骤 5:文件暂存 + Angular 约定式提交规范(重点)

git add .

🔥 Angular 约定式提交标准规范

标准格式:

<type>(<scope>): <subject> <body> <footer>
  1. type(变更类型,必填)
  • feat:新增功能、新项目初次上传
  • fix:修复代码 Bug
  • docs:文档修改
  • refactor:代码重构,无功能变更
  • perf:性能优化
  • style:代码格式调整(空格、缩进)
  • test:新增 / 修改测试代码
  • chore:构建脚本、依赖、环境配置更新
  1. scope(可选):标明改动模块,例如(Vision_Dev)
  2. subject:简短描述,小写开头,结尾不加句号

日常单行简写(绝大多数场景使用)

git commit -m "feat: 上传Python机器视觉开发项目"

复杂多行完整版(大型项目)

git commit -m "feat(Vision_Dev): 上传机器视觉demo 新增人脸检测demo1、demo2 内置haar人脸分类器、测试图片 配置.gitignore过滤视频资源 "

规范优势:版本历史清晰,可自动生成项目更新日志,团队协作可读性大幅提升。

九、步骤 6:推送远程仓库,高频报错解决方案

报错 1:src refspec main does not match any

原因:旧版 git init 默认分支为master;GitHub/Gitee/GitCode 远程仓库默认分支为main,名称不匹配。

解决方案:本地分支重命名

git branch -M main

报错 2:remote contains work that you do not have locally / [rejected] main -> main (fetch first)

原因:远程仓库创建时自动生成 README,本地仓库全新初始化,两者没有共同提交历史。 两种方案:

方案 A【单人私有仓库可用】强制推送覆盖远程

⚠️高危!多人协作绝对禁止使用,会覆盖他人代码

git push -u origin main --force
方案 B【通用标准方案,多人协作首选】拉取远程代码合并
git pull origin main --allow-unrelated-histories git push -u origin main

--allow-unrelated-histories专门解决本地、远程仓库无共同提交历史的冲突。

推送成功标识

控制台输出包含xxx -> main,代表推送完成,刷新网页仓库查看代码。

十、后续迭代通用命令模板

首次绑定远程之后,后续更新代码直接执行:

git add . git commit -m "feat(Vision_Dev): 新增Demo" git push

十一、通用踩坑总结

  1. 一套 SSH 公钥可同时绑定 GitHub、Gitee、GitCode,无需重复生成;
  2. 优先 Ed25519 密钥,老旧环境再选用 RSA4096;
  3. .gitignore必须执行git add之前配置,已加入暂存区文件不会自动过滤;
  4. video/完全忽略文件夹;video/*保留空文件夹,仅过滤内部文件;
  5. 区分警告 warning 和错误 error,换行符警告不会阻断推送;
  6. 严格使用约定式提交规范,方便长期维护项目;
  7. --force强制推送谨慎使用,仅个人独立仓库场景考虑。