三大托管平台,怎么选
本地 Git 操作在哪个平台都完全一样,差异只在托管层:协作模型、CI 与生态。GitHub 是全球最大的开源社区,Actions 生态最丰富,开源曝光与协作首选;GitLab 胜在内置一体化 DevOps(CI/CD、容器仓库、议题看板),且支持私有化部署,企业内网主流;Gitee 服务器在国内,克隆推送稳定快速,也是给开源项目做国内镜像的现实选择。
三平台横向对比
| 维度 | GitHub | GitLab | Gitee |
|---|
| 定位 | 开源社区 · 全球协作 | DevOps 一体化 · 可自建 | 国内托管 · 访问稳定 |
| 协作单元 | Pull Request | Merge Request | Pull Request |
| CI/CD | GitHub Actions | GitLab CI(.gitlab-ci.yml) | Gitee Go |
| 私有化部署 | 不支持 | 支持(CE/EE 自建) | 企业版支持 |
| 国内直连 | 时好时坏 | 官方云慢 / 自建快 | 快 |
| 开源生态 | 最大 | 中等 | 成长中 |
务实建议:开源项目主仓放 GitHub、Gitee 做镜像;公司内网自建选 GitLab CE。不必纠结"哪个最好"——很多团队多平台并用(见下方「多平台同步推送」)。
SSH 密钥:一次配置,三平台通用
免密拉取与推送的标准做法。生成一对 ed25519 密钥,把公钥贴到各平台的「SSH Keys」设置:
# 生成密钥对(一路回车,或设口令保护)
ssh-keygen -t ed25519 -C "you@example.com"
# 复制公钥内容,粘贴到平台的 SSH Keys 设置页
cat ~/.ssh/id_ed25519.pub
# 各平台连通性测试(首次连接输入 yes)
ssh -T git@github.com
ssh -T git@gitlab.com
ssh -T git@gitee.com
多平台、多账号用 ~/.ssh/config 给每把钥匙指定用途:
# ~/.ssh/config
Host github
HostName github.com
User git
IdentityFile ~/.ssh/id_github
Host gitee
HostName gitee.com
User git
IdentityFile ~/.ssh/id_gitee
之后克隆地址写成 git@gitee:user/repo.git(用别名代替域名)。原则:一平台一把钥匙,泄露可单独吊销;ed25519 比 RSA 更短更快。
HTTPS + 访问令牌:密码推送已成历史
GitHub 自 2021 年起禁止账户密码推送,HTTPS 方式统一改用 Personal Access Token(GitLab 同名,Gitee 叫「私人令牌」):在平台「设置 → 开发者选项」生成,推送时当密码用。令牌交给凭据管理器,只需配置一次:
# Windows 用 Git Credential Manager(安装 Git 时默认附带)
git config --global credential.helper manager
# 首次 push 弹窗登录授权,之后自动携带 token
git push origin main
安全提示:不要把 token 写进远程 URL(https://oauth2:TOKEN@...)——它会明文留在 .git/config;只授予 repo 等最小权限范围,并定期轮换。
PR / MR:协作的核心单元
GitHub、Gitee 叫 Pull Request,GitLab 叫 Merge Request,本质相同:把一个分支的提交申请合并进目标分支,评审、CI、讨论都挂在这个单元上。标准特性分支流程:
git switch -c feat/login
git commit -m "feat(login): 支持手机号验证码登录"
git push -u origin feat/login
# 网页上创建 PR/MR → CI 通过 → 评审 → 合并(merge / squash)
给开源项目贡献代码走 fork 模式:先把项目 Fork 到自己账号,clone 自己的副本,再指向上游:
git remote add upstream https://github.com/owner/awesome.git
git fetch upstream
git rebase upstream/main # 让自己的提交基于最新上游
git push origin feat/xxx # 然后向上游发起 PR
经验:PR 小而聚焦最快合并;分支搁置越久,rebase 冲突越滚越大。
国内访问加速实战
GitHub 在国内的连通性不稳定,三类场景各有稳的做法:
- 克隆大仓库:浅克隆 + 只取目标分支,下载量降一个数量级:
git clone --depth=1 --single-branch --branch main <url> - 日常稳定拉取:在 Gitee「导入仓库」建立镜像,日常从 Gitee 克隆;公司团队可直接自建 GitLab。
- 只要发布产物:不克隆源码,直接到 Release 页面下载压缩包与二进制文件。
提醒:第三方加速代理地址变动频繁,且可能记录访问内容——涉及私有代码或凭据的流量,不要图方便走不明代理。
一份代码,多平台同步推送
主仓在 GitHub、镜像在 Gitee 的典型双托管,用多 remote 一次推送:
# 方式一:多个 remote,分别推送(fetch / push 关系清晰)
git remote add github git@github.com:user/repo.git
git remote add gitee git@gitee.com:user/repo.git
git push github main
git push gitee main
# 方式二:一个 remote 挂多个 push URL,一条命令全推
git remote set-url --add --push origin git@github.com:user/repo.git
git remote set-url --add --push origin git@gitee.com:user/repo.git
git push origin main
注意:--add --push 之后 fetch 仍只认第一个 URL;若在某平台单独改写过历史(force-push),两边 main 会分叉,同步前先分别 git fetch 确认。