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的提交),因为它不重写历史。
相关推荐
Lin_Aries_04211 天前
通过配置 GitLab 自动触发项目自动化构建与部署
运维·docker·容器·自动化·云计算·gitlab
peihexian1 天前
gitlab runner 里面使用harbor私仓
gitlab
angushine1 天前
gitlab定时备份
gitlab
走上未曾设想的道路2 天前
k8s集群与gitlab registry连接
容器·kubernetes·gitlab
VirusVIP2 天前
gitlab解决合并冲突本地处理的步骤
gitlab
jqh_04843 天前
docker jenkins gitlab 流水线构建
docker·gitlab·jenkins
泻水置平地3 天前
gitlab操作技巧
gitlab
骑士9991113 天前
安装gitlab并上传本地项目
gitlab
Lin_Aries_04213 天前
基于 GitLab 的自动化镜像构建
linux·运维·docker·容器·自动化·gitlab