GitLab:代码管理

目录

一、概念

[1.1 概念](#1.1 概念)

[1.2 核心功能](#1.2 核心功能)

二、代码管理

[2.1 基础Git命令](#2.1 基础Git命令)

[2.2 Git仓库管理](#2.2 Git仓库管理)

[2.3 GitLab核心工作流](#2.3 GitLab核心工作流)

[2.3.1 分支策略](#2.3.1 分支策略)

[2.3.2 Merge Request(MR)/ Pull Request(PR)](#2.3.2 Merge Request(MR)/ Pull Request(PR))

[2.4 .gitignore文件](#2.4 .gitignore文件)

三、Git常用命令

[3.1 仓库初始化与克隆](#3.1 仓库初始化与克隆)

[3.2 基础工作流(最常用)](#3.2 基础工作流(最常用))

[3.3 分支操作](#3.3 分支操作)

[3.4 查看历史与比较差异](#3.4 查看历史与比较差异)

[3.5 远程协作](#3.5 远程协作)

[3.6 撤销与回退](#3.6 撤销与回退)


一、概念

1.1 概念

GitLab 是一个功能强大的 DevOps 平台,它远不止于一个简单的代码托管工具,旨在为软件开发团队提供从项目规划、代码管理到构建、测试、部署和监控的全流程支持。本文主要讲的是它的代码托管功能。

下面展示了 GitLab 与另一个流行的代码托管平台 GitHub 的核心区别:

特性对比 GitLab GitHub
核心定位 一体化的 DevOps 平台 侧重于代码托管开源社区
私有仓库 免费支持私有项目,适合企业内部使用 私有项目通常需要付费计划
部署方式 支持 SaaS (GitLab.com) 和 自行部署,灵活性高 主要以 SaaS 服务为主
CI/CD 功能 内置强大的持续集成/持续部署 (CI/CD) 工具 主要通过 GitHub Actions(需额外配置)或第三方工具实现
文化侧重 更注重企业内部开发流程权限管控 拥有强大的开源社区文化和协作生态

1.2 核心功能

  • 代码管理与版本控制:基于 Git,提供完整的代码仓库管理,包括分支管理、合并请求(Merge Request)、代码审查等,确保代码变更清晰可控。

  • CI/CD(持续集成与持续部署) :这是 GitLab 的王牌功能。通过项目根目录下的一个 .gitlab-ci.yml 配置文件,即可自动化完成软件的构建、测试和部署流程,实现快速、可靠的交付。

  • 项目管理与协作:内置了问题(Issue)跟踪、Wiki 文档、看板(Kanban)等工具,帮助团队高效管理任务和知识。

  • 安全与权限管理:提供精细化的权限控制(从访客到维护者多个角色),并集成了安全扫描工具(如 SAST、DAST),能在开发早期发现漏洞。

二、代码管理

2.1 基础Git命令

  • clone:克隆远程仓库。

  • add / commit:提交更改到本地仓库。

  • push / pull / fetch:与远程仓库同步。

  • branch / checkout:分支管理。

  • merge / rebase:合并代码(理解两者的区别和适用场景)。

  • status / log / diff:查看状态、历史和差异。

2.2 Git仓库管理

  • 仓库类型

    • 私有仓库GitLab 的显著优势。免费版即可创建无限量的私有仓库,非常适合企业内部项目。

    • 内部仓库:对登录用户可见,适合跨部门协作。

    • 公开仓库:对外部世界完全可见,适合开源项目。

  • 分支保护

    这是保证主分支(如 mainmaster)代码质量的关键。

    • 保护规则 :可以设置哪些角色(如 Maintainer, Developer)拥有推送(Push)、合并(Merge)到特定分支的权限。

    • 合并前要求

      • 至少 X 个批准:要求合并请求必须获得指定数量的核心成员批准。

      • 流水线必须成功:要求关联的 CI/CD 流水线必须运行成功,否则无法合并。

      • 讨论必须解决:要求合并请求中的所有评论和线程都必须被标记为"已解决"。

  • 文件锁

    对于二进制文件(如图片、文档)或关键配置文件,可以将其锁定,防止多人同时编辑导致冲突。

2.3 GitLab核心工作流

2.3.1 分支策略

  • 主分支mainmaster,保持稳定,随时可部署。

  • 功能分支 :从main拉取,用于新功能开发,命名如 feature/user-authentication

  • 发布分支 :从main拉取,用于准备发布,命名如 release/1.2.0,只做Bug修复。

  • 热修复分支 :从main拉取,用于生产环境紧急修复,命名如 hotfix/critical-bug

  • GitFlow:一个经典的分支模型,GitLab有很好的支持。了解其流程。

2.3.2 Merge Request(MR)/ Pull Request(PR)

  • 核心价值:代码审查、知识共享、质量保证。

  • 流程

    1. 在功能分支上开发完成。

    2. 在GitLab上创建一个MR,请求将你的分支合并到main分支。

    3. 指定审查者:让你的同事或Tech Lead审查代码。

    4. 讨论和修改:根据审查意见在本地修改,然后推送到同一个功能分支,MR会自动更新。

    5. CI/CD流水线通过:确保你的代码通过所有自动化测试和检查。

    6. 合并:由代码审查者或你自己(如果允许)完成合并。

  • 最佳实践

    • 写清晰的MR标题和描述,说明改了什么,为什么改。

    • 链接相关的问题。

    • 使用"Squash commits"选项保持提交历史整洁。

2.4 .gitignore文件

这是 Java 项目的必备文件 。它告诉 Git 忽略哪些文件(如编译生成的 target/ 目录、IDE 配置文件 .idea/.class 文件等)。一个配置正确的 .gitignore 可以保持仓库的清洁。

三、Git常用命令

3.1 仓库初始化与克隆

这些命令用于开始一个项目,要么在本地创建新仓库,要么获取现有的远程仓库。

命令 说明 常用选项与示例 应用场景
git init 将当前目录初始化为一个新的 Git 仓库。 git init 在本地创建一个全新的项目。
git clone 克隆(下载)一个远程仓库到本地。 git clone <repo_url> git clone <repo_url> <目录名> 从 GitLab/GitHub 上获取项目代码,开始工作。

3.2 基础工作流(最常用)

这是日常开发中使用最频繁的命令,对应着 Git 的基本工作流程:修改 -> 暂存 -> 提交。

命令 说明 常用选项与示例 应用场景
git status 查看工作区和暂存区的状态(哪些文件被修改、哪些已暂存)。 git status git status -s (简洁模式) 随时使用,查看当前更改状态。
git add 将工作区的修改添加到暂存区。 git add <文件名> git add . (添加所有更改) git add -p (交互式暂存,推荐) 准备提交前,将相关的更改打包。
git commit 将暂存区的内容提交到本地仓库,创建一个新的版本记录。 git commit -m "提交信息" git commit -am "提交信息" (跳过git add,只对已跟踪文件有效) 完成一个小的功能点或修复后,保存工作进度。
git restore (或 git checkout -- 撤销工作区的修改 ,恢复到最近一次 git commitgit add 时的状态。 git restore <文件名> git restore . (撤销所有未暂存的修改) 危险! 丢弃尚未暂存的本地修改。
git restore --staged (或 git reset HEAD 将文件从暂存区移回工作区,取消暂存。 git restore --staged <文件名> 误将不需要的文件git add了,可以将其移出暂存区。
  • git add -p(交互式暂存) :这是一个高级但极其有用的功能。它允许检查每个代码块(hunk),并决定是否将其暂存。这可以帮助创建逻辑清晰、小而专注的提交,而不是一个大的"各种修改"的提交。

3.3 分支操作

命令 说明 常用选项与示例 应用场景
git branch 查看、创建、删除分支。 git branch (列出所有本地分支) git branch <分支名> (创建新分支) git branch -d <分支名> (删除已合并的分支) 分支管理。
git checkout 切换分支或恢复工作区文件。 git checkout <分支名> (切换分支) git checkout -b <新分支名> (创建并切换到新分支) 切换工作上下文,开始新功能开发。
git switch (较新版本) 专门用于切换分支 ,比 git checkout 意图更清晰。 git switch <分支名> git switch -c <新分支名> (创建并切换) 推荐用它来替代 git checkout <分支名>
git merge 将指定分支的修改合并到当前分支 git merge <分支名> 通常用于将功能分支合并到主分支(如 main)。
git rebase 将当前分支的提交"重新播放"到目标分支上,形成线性的提交历史。 git rebase <目标分支> 整理提交历史 ,使历史更清晰。注意:不要在公共分支上使用!

3.4 查看历史与比较差异

命令 说明 常用选项与示例 应用场景
git log 查看提交历史。 git log git log --oneline (简洁模式) git log --graph (图形化显示) 查看谁在什么时候做了什么。
git diff 显示差异。 git diff (工作区 vs 暂存区) git diff --staged (暂存区 vs 最新提交) git diff <分支A> <分支B> 查看代码的具体改动内容。

3.5 远程协作

与远程仓库(如 GitLab)交互的命令。

命令 说明 常用选项与示例 应用场景
git remote 管理远程仓库地址。 git remote -v (查看远程地址) git remote add origin <url> (添加远程仓库) 通常克隆后自动设置好 origin
git fetch 从远程仓库下载最新数据 ,但不合并到工作区。 git fetch 安全地查看同事是否有新提交。
git pull 从远程仓库下载并合并到当前分支。 git pull (相当于 git fetch + git mergegit pull --rebase (相当于 git fetch + git rebase 更新本地代码,获取团队最新进展。
git push 将本地提交推送到远程仓库。 git push -u origin <分支名> (首次推送分支,建立关联) git push (后续推送) 分享你的代码,将本地提交推送到 GitLab。

3.6 撤销与回退

命令 说明 常用选项与示例 应用场景
git commit --amend 修补最新提交。可以修改提交信息或加入漏掉的文件。 git commit --amend -m "新信息" 刚提交完发现少了个文件或提交信息写错了。
git reset 回退到指定的提交,有三种模式。 git reset --soft <commit_id> (移动HEAD,保留暂存区和工作区) git reset --mixed <commit_id> (默认 ,移动HEAD,保留工作区) git reset --hard <commit_id> (危险! 彻底回退,丢弃所有更改) 撤销本地提交谨慎使用 --hard
git revert 创建一个新的提交来撤销指定提交的更改 git revert <commit_id> 安全地撤销公共提交(如已推送到GitLab的提交),因为它不重写历史。
相关推荐
切糕师学AI1 天前
GitLab 是什么?
gitlab
明月心9523 天前
git remote add 用法
gitlab
only_Klein3 天前
jenkins流水线报错:Connection reset by peer
ci/cd·kubernetes·gitlab·jenkins·ssl
梁萌4 天前
docker部署gitlab和gitlab runner
docker·eureka·gitlab
johnnyAndCode4 天前
Idea 设置GitLab时使用账密,而不是token的配置方法
gitlab·idea
天外飞雨4 天前
Gitlab使用
gitlab
BUTCHER55 天前
GitLab SSH 密钥配置
运维·ssh·gitlab
明月心9525 天前
GitLab使用
gitlab
明月心9526 天前
gitlab pull requets
gitlab
BUTCHER56 天前
GitLab基本设置
gitlab