GitHub 到 GitLab 迁移指南
你已经学完了 GitHub 教程,现在要进入企业级 GitLab 世界。本文档帮你快速理解两者的核心区别。
🎯 一句话总结
GitHub = 开源社区 + 个人开发者
GitLab = 企业私有部署 + 团队协作
📊 核心区别对照表
| 维度 | GitHub | GitLab |
|---|---|---|
| 定位 | 开源社区平台 | 企业级 DevOps 平台 |
| 部署方式 | 只有 SaaS(github.com) | SaaS + 私有部署(企业内网) |
| 代码可见性 | 默认公开(开源友好) | 默认私有(企业友好) |
| CI/CD | GitHub Actions(独立产品) | 内置 GitLab CI/CD |
| 代码审查 | Pull Request (PR) | Merge Request (MR) |
| Issue 跟踪 | GitHub Issues | GitLab Issues + Boards |
| 包管理 | GitHub Packages | GitLab Package Registry |
| 容器注册 | GitHub Container Registry | GitLab Container Registry |
| Wiki | 仓库内置 Wiki | 仓库内置 Wiki |
| 安全扫描 | 需要第三方工具 | 内置 SAST/DAST 扫描 |
🔄 概念映射表
你在 GitHub 学的概念,在 GitLab 里叫什么:
| GitHub 概念 | GitLab 对应 | 说明 |
|---|---|---|
| Repository (Repo) | Project | 都是代码仓库,叫法不同 |
| Pull Request (PR) | Merge Request (MR) | 都是代码合并请求,功能一样 |
| Fork | Fork | 概念相同,但企业内部很少用 Fork |
| GitHub Actions | GitLab CI/CD | 都是 CI/CD 工具 |
| GitHub Issues | GitLab Issues | 几乎一样 |
| GitHub Pages | GitLab Pages | 功能类似,配置略不同 |
| Organization | Group | 都是团队/组织 |
| GitHub CLI (gh) | GitLab CLI (glab) | 命令行工具 |
| Secrets | CI/CD Variables | 都是敏感信息管理 |
| Branch Protection Rules | Protected Branches | 分支保护 |
🏢 企业为什么更常用 GitLab?
1. 私有部署(最关键)
GitHub:
代码存在 github.com(微软服务器)
→ 企业担心数据安全
GitLab:
可以部署在企业内网
→ 代码完全自己掌控
→ 满足合规要求(如金融、政府)
2. 一体化 DevOps 平台
GitHub 的做法:
代码托管 → GitHub
CI/CD → GitHub Actions
容器 → Docker Hub
监控 → 第三方工具
→ 需要集成很多工具
GitLab 的做法:
代码托管 + CI/CD + 容器 + 监控 + 安全扫描
→ 全家桶,一站式解决
3. 权限控制更细
GitHub:
- 仓库级别权限(Read/Write/Admin)
- 相对简单
GitLab:
- Group → Subgroup → Project 多层嵌套
- 保护分支、保护 Tag
- MR 审批流程可配置
- 适合大型企业复杂组织架构
🔄 工作流对比
GitHub 工作流
bash
# 1. Fork 仓库(或有写权限直接 clone)
git clone git@github.com:your-username/repo.git
# 2. 创建分支
git checkout -b feature/my-feature
# 3. 开发并推送
git add .
git commit -m "feat: 添加新功能"
git push origin feature/my-feature
# 4. 在 GitHub 上创建 Pull Request
# 5. Code Review + 合并
GitLab 工作流(企业内)
bash
# 1. 直接 clone(通常有写权限,不需要 Fork)
git clone git@gitlab.company.com:team/project.git
# 2. 创建分支
git checkout -b feature/my-feature
# 3. 开发并推送
git add .
git commit -m "feat: 添加新功能"
git push origin feature/my-feature
# 4. 在 GitLab 上创建 Merge Request
# 5. Code Review + 合并
核心区别:
- 企业内部通常不需要 Fork,直接 clone 就有写权限
- 合并请求叫 MR,不是 PR
- CI/CD 配置文件是
.gitlab-ci.yml,不是.github/workflows/
🛠️ CI/CD 配置对比
GitHub Actions
yaml
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm install
- run: npm test
GitLab CI/CD
yaml
# .gitlab-ci.yml
stages:
- test
- build
- deploy
test:
stage: test
image: node:16
script:
- npm install
- npm test
only:
- branches
build:
stage: build
image: docker:latest
script:
- docker build -t my-app:$CI_COMMIT_SHA .
only:
- main
配置文件对比:
| 项目 | GitHub Actions | GitLab CI/CD |
|---|---|---|
| 配置文件路径 | .github/workflows/xxx.yml |
.gitlab-ci.yml |
| 触发方式 | on: push/pull_request |
only: branches/tags |
| 运行器 | GitHub-hosted / Self-hosted | GitLab Runner |
| 变量管理 | Secrets | CI/CD Variables |
| 缓存 | actions/cache |
cache: 关键字 |
🔐 认证方式对比
GitHub SSH 配置
bash
# 生成密钥
ssh-keygen -t ed25519 -C "your-email@example.com"
# 添加到 GitHub 网站
# 测试连接
ssh -T git@github.com
> Hi username! You've successfully authenticated
GitLab SSH 配置
bash
# 生成密钥(完全一样)
ssh-keygen -t ed25519 -C "your-email@company.com"
# 添加到 GitLab 网站
# 测试连接
ssh -T git@gitlab.company.com
> Welcome to GitLab, @username!
区别:
- SSH 配置方法完全一样
- 只是服务器地址不同(github.com vs gitlab.company.com)
- 企业 GitLab 通常是内网地址
📋 常用命令对照
bash
# 克隆仓库
github: git clone git@github.com:user/repo.git
gitlab: git clone git@gitlab.company.com:group/project.git
# 推送分支
github: git push origin feature/xxx
gitlab: git push origin feature/xxx # 完全一样
# 查看 MR/PR(命令行工具)
github: gh pr list
gitlab: glab mr list
# 创建 MR/PR(命令行工具)
github: gh pr create
gitlab: glab mr create
# 查看 CI/CD 状态
github: gh run list
gitlab: glab ci list
🎯 你需要调整的习惯
| 从 GitHub 迁移到 GitLab | 你需要做的改变 |
|---|---|
| Pull Request | 改口叫 Merge Request (MR) |
.github/workflows/ |
改为 .gitlab-ci.yml |
actions/checkout |
改为 GitLab CI 的 script |
| Fork 工作流 | 企业内通常直接 clone + 分支 |
GitHub CLI (gh) |
安装 GitLab CLI (glab) |
| Secrets | 改用 CI/CD Variables |
main 分支 |
可能叫 master(看公司规范) |
🚀 快速开始
1. 注册/登录 GitLab
如果你是去公司实习:
→ 公司会给你分配 GitLab 账号
→ 地址通常是 gitlab.company.com 或内网 IP
如果是自己练习:
→ 注册 https://gitlab.com (公共 GitLab)
→ 或者用公司提供的测试环境
2. 配置 SSH(和 GitHub 一样)
bash
# 如果你之前已经配置过 GitHub SSH,
# 可以复用同一个密钥,也可以生成新的
# 复用已有密钥
# 把 ~/.ssh/id_ed25519.pub 的内容添加到 GitLab 网站
# 或者生成新密钥
ssh-keygen -t ed25519 -C "your-email@company.com" -f ~/.ssh/gitlab_rsa
3. 配置 Git 用户信息
bash
# 如果公司用公司邮箱
git config --global user.name "你的名字"
git config --global user.email "your-name@company.com"
📚 学习路径建议
你已经学完了 GitHub 教程,接下来学习 GitLab 文档时:
01-Git核心概念与企业环境配置
→ 跳过 Git 基础(你已经会了)
→ 重点看:SSH 配置(企业环境)、.gitignore
02-企业分支管理策略
→ 重点看:Git Flow、分支命名规范
→ 这是企业最常用的工作流
03-Git工作流实战
→ 重点看:日常开发流程、Commit 规范
04-团队协作与Code Review
→ 重点看:MR 全流程、分支保护
05-企业级CI-CD与代码质量
→ 重点看:.gitlab-ci.yml 配置
→ 这是和 GitHub Actions 最大的不同
06-Git高级技巧与故障排查
→ 重点看:reflog、reset、revert
07-完整实战场景演练
→ 综合练习
🎯 总结
你已经掌握的 GitHub 知识:
✅ Git 基础命令(clone, add, commit, push, pull)
✅ 分支管理(创建、切换、合并)
✅ SSH 配置
✅ Pull Request 流程
✅ GitHub Actions 基础
迁移到 GitLab 只需要改变:
📝 PR → MR
📝 .github/workflows/ → .gitlab-ci.yml
📝 GitHub Actions → GitLab CI/CD
📝 gh CLI → glab CLI
📝 公开仓库 → 私有仓库
好消息:Git 命令本身是通用的!你在 GitHub 学的所有 Git 操作,在 GitLab 里完全一样。
现在开始学习 GitLab 教程吧! 👉 01-Git核心概念与企业环境配置