写给即将进入企业开发的工程师
适用系统:
-
✓ macOS Intel / Apple Silicon
-
✓ Windows(WSL2)
适用场景:
-
✓ GitLab SaaS(gitlab.com)
-
✓ 企业自建GitLab
-
✓ GitLab CE / EE
本文最终目标:
从零开始,在GitLab上创建一个私有项目,配置SSH密钥完成首次代码提交,并模拟企业级开发流程:创建功能分支 → 开发 → 发起Merge Request → Code Review → 合并到main分支。
如果你完成本文,你将掌握企业中使用GitLab的标准工作流。
一、创建GitLab私有项目
步骤1:登录GitLab并创建项目
-
登录 gitlab.com或你的企业GitLab地址
-
点击左上角
+→New project/repository -
选择
Create blank project(创建空白项目)
步骤2:填写项目信息
-
Project name :输入你的项目名称,例如
Aeternus -
Project URL:这里需要注意!GitLab会让你选择项目的所属位置:
-
选你的用户名 → 个人项目
-
选一个Group → 团队项目(企业里通常选这个)
-
-
Visibility Level :选
Private(私有,只有你和项目成员能看) -
不要勾选
Initialize repository with a README(因为我们本地已有项目)
点击 Create project。
**为什么要注意Group?** 企业里项目通常归属于团队(Group),而不是个人。如果选错,后续迁移会比较麻烦。新人第一次创建时,建议先选个人项目熟悉流程。
创建完成后,你会看到项目首页,右上角有一个 Clone按钮,点击后选择 Clone with SSH,复制地址:
git@gitlab.com:你的用户名/Aeternus.git
先放着,后面会用到。
二、配置SSH Key
如果你已经在GitHub那篇教程中配置过SSH密钥,那么好消息是:同一套SSH密钥可以同时用于GitHub和GitLab,不需要重新生成。
步骤1:查看本地是否已有SSH密钥
打开终端,执行:
ls ~/.ssh
如果你看到 id_ed25519和 id_ed25519.pub两个文件,说明你已经生成过密钥,可以直接跳到步骤3。
如果你没有看到这两个文件,或者你想为GitLab单独生成一套密钥,继续步骤2。
步骤2:生成新的SSH密钥对
ssh-keygen -t ed25519 -C "你的GitLab注册邮箱"
交互过程和GitHub完全一样,一路回车即可。
步骤3:查看公钥内容并复制
cat ~/.ssh/id_ed25519.pub
完整复制输出的内容。
步骤4:GitLab网页端配置公钥
-
GitLab右上角头像 →
Preferences(或Edit profile) -
左侧菜单 →
SSH Keys -
Key:粘贴刚刚复制的公钥内容
-
Title:自定义,例如
MacBook-工作机 -
Expiration date:可选,建议留空(不过期)
-
Usage type:选
Authentication & Signing -
点击
Add key
步骤5:测试SSH连接
ssh -T git@gitlab.com
如果看到以下提示,代表配置成功:
Welcome to GitLab, @你的用户名!
⚠️ 注意:不要因为配置GitLab就删除原来的SSH Key。
同一套SSH Key可以同时用于:
GitHub
GitLab
公司服务器
云服务器
只需要把公钥再添加到GitLab即可。除非你明确知道自己在做什么,否则不要删除
~/.ssh下已有文件。
三、首次提交代码到GitLab
步骤1:进入你的项目根目录
cd /Users/edy/PycharmProjects/Aeternus
步骤2:初始化Git仓库
git init
步骤3:配置Git用户名和邮箱(如果之前没配过)
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
步骤4:创建.gitignore
如果你还没有 .gitignore文件,创建一个并写入需要忽略的规则。Python项目示例:
__pycache__/
*.py[cod]
*.so
.env
venv/
.idea/
.vscode/
*.log
步骤5:添加文件并提交
git add .
git commit -m "初始化提交:Aeternus接口自动化框架"
步骤6:关联远程仓库
git remote add origin git@gitlab.com:你的用户名/Aeternus.git
步骤7:推送代码
git branch -M main
git push -u origin main
验证是否推送成功
git remote -v # 查看远程仓库地址是否正确
git branch # 查看当前分支是否为main
git status # 查看工作区是否干净
刷新GitLab项目页面,你应该能看到代码已经出现在仓库中。
四、企业开发流程:为什么公司不允许直接往main提交代码?
如果你是自己做个人项目,直接在 main分支上开发、提交、推送,完全没问题。
但在企业里,这样做是不被允许的。
原因很简单:
-
main分支是稳定版本:线上的代码、发布的版本,都基于main分支。任何人直接往main推送代码,都可能引入Bug,导致线上事故。
-
没有Code Review:直接推送意味着代码没有被其他人审查过,质量问题、安全隐患都无法被发现。
-
无法追溯:出了问题不知道是谁改的、为什么改、有没有经过测试。
很多公司的GitLab会直接保护main分支。即使你拥有项目权限,执行 git push origin main也会收到:
remote: You are not allowed to push code to protected branches.
fatal: failed to push some refs
因为公司要求:所有代码必须通过Merge Request进入main。
所以企业里普遍采用分支开发 + Merge Request的工作流:
main(稳定版本)
↑
Merge Request + Code Review
↑
feature/xxx(功能开发分支)
这个流程确保了:任何代码进入main之前,都必须经过审查和验证。
五、Merge Request完整实战
现在我们模拟一个真实场景:你需要为项目新增一个登录功能的测试用例。
步骤1:创建功能分支
git checkout main
git pull origin main
git checkout -b feature/add-login-tests
checkout -b的意思是:创建并切换到新分支。分支名 feature/add-login-tests遵循了常见的命名规范(见第七节)。
⚠️ **注意:** 很多公司要求创建功能分支之前,必须先同步最新main。否则你基于旧代码开发,后续Merge Request时容易出现大量冲突。
步骤2:在分支上开发和提交
假设你新增了一个测试文件 test_login.py,然后:
git add test_login.py
git commit -m "feat: 新增登录功能测试用例"
git push origin feature/add-login-tests
⚠️ 注意: 第一次推送新分支时,可能会提示
fatal: The current branch has no upstream branch.,此时应执行git push -u origin feature/add-login-tests建立关联,以后直接git push即可。
步骤3:在GitLab网页端发起Merge Request
-
进入你的GitLab项目页面
-
点击左侧菜单
Merge Requests→New merge request -
Source branch :选择
feature/add-login-tests(你开发的分支) -
Target branch :选择
main(你要合并到的分支) -
点击
Compare branches and continue
在创建MR的页面中:
-
Title :填写MR标题,例如
feat: 新增登录功能测试用例 -
Description:描述你做了什么、为什么做、如何验证
-
Assignee:负责处理这个MR的人(通常是自己)
-
Reviewer:负责审核代码的人(可以邀请团队成员)
-
Labels :可选,给MR打标签,如
feature、test
点击 Create merge request。
步骤4:Code Review与合并
MR创建后,团队成员会在MR页面看到你的代码变更。他们可以:
-
逐行查看代码差异
-
在具体代码行上留下评论和建议
-
批准或拒绝MR
很多公司还会要求以下三项全部满足后,Merge按钮才会变成可点击状态:
-
✓ Reviewer通过
-
✓ CI Pipeline通过
-
✓ 冲突检查通过
当所有条件都满足后,你就可以点击 Merge按钮,将 feature/add-login-tests的代码合并到 main分支。
步骤5:合并后清理本地分支
合并完成后,切回main分支并删除本地功能分支:
git checkout main
git pull origin main
git branch -d feature/add-login-tests
⚠️ **注意:** 很多新人会在Merge完成后继续在旧的功能分支上开发。这是一个坏习惯。功能已经合并后,正确的做法是:
切回main
拉取最新代码
基于最新main创建新的功能分支
git checkout main
git pull origin main
git checkout -b feature/new-task这样可以避免把旧任务的历史改动带到新任务中。
六、企业里一天是怎么开发的?
这一章是整篇最值钱的内容。很多教程不会写,但它是你明天上班就会用到的。
早上到公司:
git checkout main
git pull origin main
拉取最新的main分支代码。
接到一个新任务:
先同步最新代码,再创建功能分支:
git checkout main
git pull origin main
git checkout -b feature/add-login-tests
开始开发:
写代码、调试、本地测试。
开发完成:
git add .
git commit -m "feat: 新增登录功能测试用例"
git push origin feature/add-login-tests
⚠️ 很多新人以为:
git push之后代码就已经进入main了。实际上并没有。代码只是被推送到了远程功能分支feature/add-login-tests。只有Merge Request审核通过并完成Merge之后,代码才真正进入main分支。
发起Merge Request:
在GitLab网页端创建MR,指定reviewer。
等待Code Review:
reviewer会在MR页面留下评论,可能有修改意见。
根据意见修改:
# 修改代码
git add .
git commit -m "fix: 根据review意见修改断言逻辑"
git push origin feature/add-login-tests
推送后MR会自动更新,reviewer可以看到最新改动。
MR通过,合并:
点击 Merge按钮,代码合并到main。
清理:
git checkout main
git pull origin main
git branch -d feature/add-login-tests
这就是很多互联网公司工程师每天都会重复几十次的流程。
七、分支命名规范
企业里通常有统一的分支命名规范,便于团队理解和协作。以下是最常见的规范:
| 前缀 | 用途 | 示例 |
|---|---|---|
feature/ |
新功能开发 | feature/add-login-tests |
bugfix/ |
缺陷修复 | bugfix/login-null-pointer |
hotfix/ |
线上紧急修复 | hotfix/order-crash |
test/ |
测试验证 | test/api-performance |
release/ |
发布版本 | release/v1.2.0 |
命名建议:
-
使用英文,小写字母
-
单词之间用短横线
-分隔 -
尽量简短但表意清晰
-
避免使用中文和特殊字符
八、本地合并 vs MR合并:什么时候用什么?
很多新人会问:我能不能直接在本地合并分支,然后推送到main?
答案是:看场景。
个人项目或实验性项目
可以直接在本地合并:
git checkout main
git merge feature/xxx
git push origin main
团队项目或正式项目
必须走MR流程。
因为:
-
MR提供了Code Review的机会
-
MR记录了谁在什么时候合并了什么代码
-
MR可以触发CI自动化检查
-
MR可以在发现问题时随时关闭,不会污染main分支
**一句话原则:** 只要代码会影响他人或线上环境,就走MR。
九、你已经掌握了什么
如果你已经跟着操作完成了这篇文章,那么你已经掌握了:
✓ 创建GitLab私有项目
✓ 配置SSH Key并连接GitLab
✓ 首次提交代码到GitLab
✓ 理解企业为什么不允许直接推main
✓ 创建功能分支并发起Merge Request
✓ 完成Code Review和代码合并
✓ 了解企业工程师一天的开发流程
✓ 掌握分支命名规范
✓ 区分本地合并和MR合并的使用场景
很多人以为,会写代码就是工程师。实际上,会协作、会Review、会把代码安全地交付出去,才是真正进入工程化开发的开始。
学会发起MR、做Code Review、遵守分支规范,是从个人开发者走向团队工程师的关键一步。