4、代码仓库托管:GitHub/GitLab/Gitee平台对比、创建与管理远程仓库、SSH密钥配置

代码仓库托管,说白了就是给我们的代码找个“云上的家”。没有它,团队协作基本靠U盘拷贝,版本管理全靠文件名后缀加日期。我刚开始带项目那会儿,就吃过这个亏——一个同事把未合并的代码直接覆盖了主分支,差点让整个迭代白干。从那以后,我立了个规矩:所有项目必须上远程仓库。

这一章,我们就把三个主流平台掰开揉碎讲清楚,再手把手把远程仓库和SSH配好。

4.1 三大平台:GitHub / GitLab / Gitee

先看一张对比图,心里有个底。

三大代码托管平台对比 GitHub GitLab Gitee 核心特性对比 全球最大开源社区 自托管首选 国内访问最快 GitHub Actions 内置CI/CD最强 Gitee Go 免费私有仓库 无限私有仓库 5人团队免费 选型建议 开源项目 → GitHub | 企业内网 → GitLab | 国内团队 → Gitee 我个人习惯:开源放GitHub,公司项目用自建GitLab,国内协作走Gitee

4.2 平台选型:什么时候选哪个?

我个人的经验是这样的——

  • GitHub:开源项目首选。社区生态最丰富,PR、Issue、Actions 一套组合拳打下来,协作效率很高。但国内访问偶尔抽风,你懂的。
  • GitLab:企业自托管首选。CI/CD 集成度极高,从代码托管到部署一条龙。我在上一家公司就用它搭了内部 DevOps 平台,安全可控。
  • Gitee:国内团队协作首选。访问速度快,支持企业版,对国内开发者友好。不过国际影响力弱一些。

一句话总结:开源项目上 GitHub,企业内网用 GitLab,国内团队协作选 Gitee。三个平台 Git 命令完全通用,切换成本很低。

4.3 创建与管理远程仓库

不管用哪个平台,创建远程仓库的步骤都差不多。我以 GitHub 为例,其他平台操作逻辑完全一致。

4.3.1 在网页端创建仓库

  1. 登录平台,点击右上角「+」→「New repository」
  2. 填写仓库名称(Repository name),建议用英文小写+连字符,比如 my-embedded-project
  3. 选择公开(Public)或私有(Private)
  4. 可选:初始化 README、.gitignore、许可证
  5. 点击「Create repository」

小技巧:.gitignore 一定要选对语言模板。嵌入式项目我一般选 C/C++ 模板,它会自动忽略编译产物(.o、.elf、.hex 等),避免把二进制文件推到仓库里。

4.3.2 将本地仓库关联到远程

仓库创建好后,你会看到这样的提示:

# 如果本地还没有仓库
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/你的用户名/仓库名.git
git push -u origin main

# 如果本地已有仓库
git remote add origin https://github.com/你的用户名/仓库名.git
git branch -M main
git push -u origin main

这里有个坑——git remote add origin 中的 origin 是远程仓库的别名,你可以改成任意名字,但业界惯例就是 origin。我曾经见过有人改成 myremote,结果同事拉代码时一脸懵。

4.3.3 管理多个远程仓库

有时候一个项目需要推送到多个远程仓库,比如同时备份到 GitHub 和 Gitee:

git remote add github https://github.com/你的用户名/仓库名.git
git remote add gitee https://gitee.com/你的用户名/仓库名.git

# 分别推送
git push github main
git push gitee main

注意:多个远程仓库之间不会自动同步。每次提交后,需要手动推送到每个远程。如果你忘了推某个,就会出现版本不一致的问题。我曾经因为这个在演示时翻车过……

4.4 SSH 密钥配置

为什么要用 SSH?说白了,就是不用每次推送都输密码。HTTPS 方式每次 git push 都要输入用户名和密码,烦不烦?SSH 配好后,一劳永逸。

4.4.1 生成 SSH 密钥对

# 打开终端,执行
ssh-keygen -t ed25519 -C "your_email@example.com"

# 如果系统不支持 ed25519,用 RSA
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

执行后,一路回车即可。默认会在 ~/.ssh/ 目录下生成两个文件:

  • id_ed25519(私钥,自己保管好,不要泄露)
  • id_ed25519.pub(公钥,可以公开,要添加到平台)

重要:私钥文件权限必须设置为 600,否则 SSH 会拒绝使用。

chmod 600 ~/.ssh/id_ed25519

4.4.2 将公钥添加到平台

以 GitHub 为例:

  1. 复制公钥内容:cat ~/.ssh/id_ed25519.pub
  2. 登录 GitHub,点击右上角头像 → Settings → SSH and GPG keys
  3. 点击「New SSH key」,粘贴公钥,保存

GitLab 和 Gitee 的操作路径类似,都在用户设置里的 SSH Keys 页面。

4.4.3 测试连接

ssh -T git@github.com
# 成功会显示:Hi 用户名! You've successfully authenticated...

ssh -T git@gitlab.com
ssh -T git@gitee.com

避坑指南:如果测试连接时提示「Permission denied」,先检查公钥是否已添加,再确认 SSH 代理是否启动:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

4.4.4 配置多个 SSH 密钥(进阶)

如果你同时使用 GitHub 和 Gitee,需要为不同平台配置不同的密钥:

# 生成两个密钥对
ssh-keygen -t ed25519 -C "github" -f ~/.ssh/id_ed25519_github
ssh-keygen -t ed25519 -C "gitee" -f ~/.ssh/id_ed25519_gitee

# 编辑 ~/.ssh/config
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_github

Host gitee.com
  HostName gitee.com
  User git
  IdentityFile ~/.ssh/id_ed25519_gitee

配置好后,Git 会自动根据域名选择对应的密钥。这个技巧我在同时维护多个平台的项目时经常用,非常实用。

4.5 远程仓库的日常管理

配好 SSH 后,日常操作就简单了:

操作 命令 说明
查看远程仓库 git remote -v 列出所有远程仓库的 URL
添加远程仓库 git remote add <别名> <URL> 关联新的远程仓库
删除远程仓库 git remote remove <别名> 解除关联
修改远程仓库 URL git remote set-url <别名> <新URL> 仓库迁移时常用
推送代码 git push <别名> <分支名> 将本地提交推送到远程
拉取代码 git pull <别名> <分支名> 拉取远程最新代码并合并

注意:git pull 相当于 git fetch + git merge。如果你不想自动合并,可以先 git fetch 查看差异,再手动合并。我在团队里要求所有人必须用 git fetch + git diff 检查后再合并,避免意外覆盖。

4.6 本章小结

这一章我们做了三件事:

  • 对比了 GitHub、GitLab、Gitee 三个平台的差异和选型建议
  • 学会了在网页端创建远程仓库,并将本地仓库关联上去
  • 配置了 SSH 密钥,告别每次推送输密码的烦恼