4、代码仓库托管:GitHub/GitLab/Gitee平台对比、创建与管理远程仓库、SSH密钥配置
代码仓库托管,说白了就是给我们的代码找个“云上的家”。没有它,团队协作基本靠U盘拷贝,版本管理全靠文件名后缀加日期。我刚开始带项目那会儿,就吃过这个亏——一个同事把未合并的代码直接覆盖了主分支,差点让整个迭代白干。从那以后,我立了个规矩:所有项目必须上远程仓库。
这一章,我们就把三个主流平台掰开揉碎讲清楚,再手把手把远程仓库和SSH配好。
4.1 三大平台:GitHub / GitLab / Gitee
先看一张对比图,心里有个底。
4.2 平台选型:什么时候选哪个?
我个人的经验是这样的——
- GitHub:开源项目首选。社区生态最丰富,PR、Issue、Actions 一套组合拳打下来,协作效率很高。但国内访问偶尔抽风,你懂的。
- GitLab:企业自托管首选。CI/CD 集成度极高,从代码托管到部署一条龙。我在上一家公司就用它搭了内部 DevOps 平台,安全可控。
- Gitee:国内团队协作首选。访问速度快,支持企业版,对国内开发者友好。不过国际影响力弱一些。
一句话总结:开源项目上 GitHub,企业内网用 GitLab,国内团队协作选 Gitee。三个平台 Git 命令完全通用,切换成本很低。
4.3 创建与管理远程仓库
不管用哪个平台,创建远程仓库的步骤都差不多。我以 GitHub 为例,其他平台操作逻辑完全一致。
4.3.1 在网页端创建仓库
- 登录平台,点击右上角「+」→「New repository」
- 填写仓库名称(Repository name),建议用英文小写+连字符,比如
my-embedded-project - 选择公开(Public)或私有(Private)
- 可选:初始化 README、.gitignore、许可证
- 点击「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 为例:
- 复制公钥内容:
cat ~/.ssh/id_ed25519.pub - 登录 GitHub,点击右上角头像 → Settings → SSH and GPG keys
- 点击「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 密钥,告别每次推送输密码的烦恼