维护工程蓝图,追踪文件从诞生到定案的过程;软件工程技巧,确保多人编辑的同一程序文件同步;用于跟踪和维护源代码、文档、配置文件等的改动。

一、版本控制和版本控制系统(VCS)

VCS的优势

  • 解决冲突:跟踪多位开发人员对同一文件的更改,帮助解决冲突,记录审计跟踪。

  • 回滚和撤消更改:记录变更历史,支持撤消变更或回滚到历史状态,快速恢复稳定版本。

  • 异地源代码备份:远程VCS实例可异地托管(如GitHub),作为安全备份。

  • 适用场景:多位开发人员维护的项目,以及单人维护的项目。

二、Git基础

(一)Git简介

定位:分布式版本控制系统(VCS)。

  • 核心概念:

    • 数据仓库(Repository):记录文件或目录状态,存储内容修改历史;包括远程数据库(专用服务器,多人共享)和本地数据库(用户本地机器配置,个人使用)。

    • 核心命令:基于本地和远程仓库的代码管理(pull、clone、fetch、push、add、commit等)。

  • 架构图

(二)Git基础概念

  1. 三大空间

    1. 工作区(working directory):项目目录内部空间,项目目录下隐藏的.git子目录是暂存区和版本库的存放位置。

    2. 暂存区(staging area/index/cache):Git跟踪和保存文件更改的地方;用户在工作区更改后,通过git add命令将更改复制到暂存区;仅记录执行暂存命令前的更改,后续更改需重新暂存。

    3. 版本库(repository):暂存区更改累积到一定程度后,通过git commit命令提交至版本库持久保存;提交是检查点,记录暂存区与前一次提交的差异;提交后暂存区自动清空。

    4. 关系:working directory →(git add)→ staging area →(git commit)→ repository

  2. 本地版本控制基本工作流程

    1. 初始化:在项目目录运行git init命令,生成.git目录结构,完成版本库初始化。

    2. 暂存:git add命令将工作区更改暂存。

    3. 提交:git commit命令将暂存区更改提交到版本库,生成包含状态快照的commit(有commit name和commit id)。

    4. 检出:git checkout命令将版本库中指定commit的状态反映到工作区。

(三)Git命令基础

  1. 命令格式git <command> <arguments>

  2. 常用子命令

    1. 启动版本库:init(初始化)、clone(克隆远程仓库)、config(配置)。

    2. 暂存文件变动:add(添加文件到暂存区)、mv(移动或重命名文件)、rm(删除文件)。

    3. 查看状态:status(查看文件状态)、log(查看提交日志)、diff(对比文件变动)、grep(搜索)、show(查看提交详情)。

    4. 分支与合并:checkout(切换分支或检出文件)、branch(管理分支)、merge(合并分支)。

    5. 远程操作:push(推送本地更改到远程仓库)、fetch(抓取远程更改到本地版本库)、pull(拉取并合并远程更改到本地工作区)。

三、常用Git命令清单

一般来说,日常使用只要记住下图6个命令,就可以。

操作:

创建git管理用户并切换

初始化并测试拉取

添加当前目录的所有文件到暂存区

身份验证提交暂存区到仓库区

推送所有分支到远程仓库 其他用户可以拉取

四、GitLab相关

(一)GitLab简介

  • 定位:Git远程存储库实现,支持代码仓库存储和远程访问;基于Ruby on Rails开发。

  • 附加功能:代码共享、分支合并请求、错误跟踪等。

(二)GitLab部署

  1. 部署要求:参考https://docs.gitlab.cn/jh/install/requirements.html

  2. 安装方法

    1. Linux安装包(Omnibus GitLab):包含极狐GitLab和依赖组件(PostgreSQL、Redis、Sidekiq等)。

    2. Helm Chart:在Kubernetes上安装。

    3. Docker:容器化安装。

    4. Source:源码安装(适用于无官方安装包的平台)。

    5. GitLab Environment Toolkit(GET):自动化工具集,用于公有云(Azure、GCP、AWS)部署。

    6. GitLab Operator:Kubernetes Operator风格部署。

  3. 前置配置(SMTP服务):安装postfix服务,编辑/etc/postfix/main.cf

(三)GitLab工作流示例

  1. 团队内部协作

    1. 前提:创建devops组,添加用户tom(Developer)和jerry(Maintainer),创建项目devops/myapp。

    2. 工作流程:

      • tom克隆仓库:git clone <remote-url>

      • 创建feature分支:git checkout -b feature/tom

      • 开发并提交代码:git add .git commit -m "update pod.yaml"

      • 推送分支:git push -uf origin feature/tom

      • GitLab上创建MR:选择从feature/tom合并到main,指派给jerry。

      • jerry审核并合并:在GitLab的合并请求页面,确认无问题后合并,可选删除源分支、压缩提交。

  2. 基于Fork的协作

    1. 前提:用户biden fork devops/myapp到个人仓库biden/myapp。

    2. 工作流程:

      • biden克隆个人仓库:git clone <biden-repo-url>

      • 添加upstream仓库:git remote add upstream <devops-repo-url>

      • 拉取上游变更:git fetch upstreamgit merge upstream/main

      • 创建feature分支:git checkout -b feature/biden

      • 开发并推送:git add .git commit -m "xxx"git push origin feature/biden

      • 提交PR:指定源仓库biden/myapp、分支feature/biden,目标仓库devops/myapp、分支main。

      • 维护者审核并合并:合并后biden拉取上游变更更新本地仓库。

安装gitlab

[gitlab]
name=gitlab
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el9/
gpgcheck=0
enabled=1

yum install -y gitlab-ce

注意:在openEuler中yum下载无法使用,可在rocky9中下载完成后导出到宿主机yum -y install gitlab --downloadonly。

目录:/var/cache/dnf/gitlab-xxxxxxxx/packages中   sz gitlab-ce-xxx.rpm 到指定宿主机目录 

mv gitlab-ce-xxx.rpm /opt/    rpm -ivh gitlab-ce-xxx.rpm安装

修改配置:

vim /etc/gitlab/gitlab.rb    

external_url '192.168.254.132'

gitalab_rails['time_zone'] = 'Asia/Shanghai'

gitlab-ctl reconfigure 加载配置,完成后gitlab-ctl start 启动服务  完成后可直接再浏览器访问服务ip使用gitlab。

获取初始密码:

cat /etc/gitlab/initial_root_password  登录用户:root 

登陆后可进行修改密码、界面汉化和新建项目等操作。

修改密码:

创建项目:

添加密钥:

只有添加密钥后才能使工作端使用网络控制系统。

主节点生成ssh密钥:

页面找到ssh keys: 

下载gitlab项目:

上传文件:

随后便可在网页访问的gitlab中你的工作项目中查看文件,其他用户也可通过访问该网站查看该文件。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐