DevOps、Git 与 GitLab 核心概念及实践
DevOps 流水线模型及相关平台(项目管理、代码托管、持续交付、运维)。详细阐述了 CI/CD 流程演变、版本控制系统(VCS)的核心功能。重点讲解了 Git 的基本概念(工作区、暂存区、本地/远程仓库)、常用命令(安装、配置、提交、分支、回滚、标签)以及私有仓库 GitLab 的安装、配置、HTTPS 设置、备份恢复和密码重置方法。通过实际案例演示了从本地开发到云端推送的完整协作流程。

DevOps 流水线模型及相关平台(项目管理、代码托管、持续交付、运维)。详细阐述了 CI/CD 流程演变、版本控制系统(VCS)的核心功能。重点讲解了 Git 的基本概念(工作区、暂存区、本地/远程仓库)、常用命令(安装、配置、提交、分支、回滚、标签)以及私有仓库 GitLab 的安装、配置、HTTPS 设置、备份恢复和密码重置方法。通过实际案例演示了从本地开发到云端推送的完整协作流程。


DevOps 涉及的四大相关平台:

持续交付:目标是拥有一个可随时部署到生产环境的代码库。
持续部署:可以自动将应用发布到生产环境。
是用于追踪、管理文件 / 代码的修改历史、实现多人协作开发、保障数据完整性的核心工具,核心解决「版本混乱、协作冲突、代码丢失、追溯无据」四大问题。从单人开发到大型团队协作均能适配,其核心功能可分为基础核心功能、分支协作功能、团队管理功能、实用辅助功能四大类。
通用且核心的功能总结:

最初是这两个,后面就演化出了熟悉的 GitHub 等。
Git 版本库逻辑上又分为暂存区和本地仓库。

git add 命令加入暂存区后,才可纳入 Git 的版本管理控制的范畴。git add 添加。当变更累积到一定阶段,希望生成里程碑式的结果时,会使用 commit,将暂存区的变更一次性的批量提交到本地仓库。git commit 提交。每一次 commit 会生成一个唯一的 ID,通常用于表示一个阶段性的新的版本。checkout 命令执行了同 commit 命令相反的操作,它将版本中存储的 commit 所代表着的某个版本恢复至工作区中。apt-get install git
mkdir myapp
cd myapp/
git init
ls -a . .. .git
设置 git,提交 commit 之前需要先配置 git 的基本信息
选项--system 表示针对所有用户的配置,保存在/etc/gitconfig 文件中
选项--global 表示当前用户环境,保存在~/.gitconfig 文件中,推荐使用
选项--local 表示只针对当前目录 (项目) 的配置,保存在当前目录的.git/config 文件中,此为默认值,可省略
优先级: local > global > system
一般都是用 global。
# 标记是谁邮箱是什么
git config --global user.name lty
git config --global user.email [email protected]
git config -l
假如创建了一个 java 文件。
cat hello.java
hello.world v1.0
git add hello.java
git status
git ls-files hello.java
git add .
git commit -m 'v3.0'
以上两个命令可以通过以下命令实现,但是必须是已经提交过的不是新的文件。
cat hello.java
hello.world v4.0
git commit -am 'v4.0'
cat .gitignore
/bin /target .classpath .project .settings *.h !test.h *.py[c|x]
git add f1.txt
git ls-files f1.txt hello.java
git status
# 方法一
git rm --cached f1.txt
# 方法二
git restore --staged f1.txt
git status
git ls-files hello.java
touch test.txt
git add .
git ls-files
git status
rm -f test.txt
ls
# 从暂存区复制文件到工作目录,两种方式
git restore test.txt
git checkout test.txt
ls
git rm -f f2.txt
echo v1 > f1.txt
git status
git add .
echo v2 > f1.txt
git status
git checkout -- f1.txt
cat f1.txt
--soft:工作目录和暂存区都不会被改变,只是本地仓库中的文件回滚到指定的版本,仅移动 HEAD 和 master 指针的指向。--mixed:默认选项。回滚暂存区和本地仓库,但工作目录不受影响。--hard:本地仓库,暂存区和工作目录都回滚到指定的提交,该选项非常危险。相比上一个可以保留历史,从内容来说确实回退了但是从逻辑来说是一个新的文件上传了。
git revert HEAD
git revert HEAD --no-edit
git revert HEAD^
git revert <commitid>
查看当前分支状态:
git branch
只创建分支不切换:
git branch dev
切换分支:
git checkout dev
git checkout -b dev
合并 dev 分支到当前分支 master:
git merge dev
三路合并:平行分支中因为不同分支中同一个文件内容不同,会出现冲突,需要手动解决冲突,并重新 add 和 commit。
想改哪个分支的名称需要先进入相应的分支中。
git branch dev * master
git checkout dev
git branch -M devel
git branch
命令:git tag
git tag v1.0
git push origin v1.0
git push origin --tags
git remote add origin https://gitee.com/heyibushuoh/myapp.git
git remote -v
git push -u origin master
推送标签:
git push --tags
安装软件:
apt install ./gitlab-ce_18.6.4-ce.0_amd64.deb
vim /etc/gitlab/gitlab.rb
# external_url 'http://gitlab.lty.com' #改成要使用的域名
gitlab-ctl reconfigure
域名解析。 默认的账户是 root,默认密码在:
cat /etc/gitlab/initial_root_password
改语言、取消注册权限、邀请成员等操作。 可以对默认仓库改名重设,推送内容和标签进仓库。
git remote rename origin old-origin
git remote add origin http://gitlab.lty.com/lty/devops.git
vim /etc/hosts #做域名解析,机器多的话建议配置 DNS 服务器
git push --set-upstream origin --all
git push --set-upstream origin --tags
克隆到 10.0.0.10 主机:
git clone http://gitlab.lty.org/lty/devops.git
cd devops/
git tag v1.0 v2.0
git checkout master
git branch main
git checkout devel
git branch
推送到仓库:
vim test.txt
git commit -am test.txt
git push --all
注意:默认分支开发者是没有权限做修改的
在 gitlab 主机上生成公钥密钥对:
ssh-keygen
将 .ssh 目录下的 id_ed25519.pub 公钥文件内容复制到某个账号的这里,那么这台主机就和这个账号关联到一起了。
备份配置文件命令;本地备份了最好把这个文件放到远程服务器上做备份。
gitlab-ctl backup-etc
ls /etc/gitlab/config_backup/
tar tvf /etc/gitlab/config_backup/gitlab_config_1770088913_2026_02_03.tar
gitlab-backup create
# 默认的备份地址:/var/opt/gitlab/backups/
# 配置文件中可以改路径
vim /etc/gitlab/gitlab.rb
恢复前先停止两个服务:
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
恢复时指定备份文件的时间部分,不需要指定文件的全名:
gitlab-backup restore BACKUP=1770089118_2026_02_03_18.6.4
重启服务:
gitlab-ctl reconfigure
gitlab-ctl restart
创建证书:
mkdir -p /etc/gitlab/ssl && cd /etc/gitlab/ssl
openssl genrsa -out gitlab.lty.org.key 2048
openssl req -days 3650 -x509 ...
修改配置文件:
vim /etc/gitlab/gitlab.rb
external_url "https://gitlab.wang.org"
nginx['enable'] = true
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] ="/etc/gitlab/ssl/gitlab.wang.org.crt"
nginx['ssl_certificate_key'] ="/etc/gitlab/ssl/gitlab.wang.org.key"
...
gitlab-ctl reconfigure
由于自签名证书不信任,访问出下面错误:
git clone http://gitlab.lty.org/devops/myai.git
fatal:无法访问'http://gitlab.lty.org/ devops/myai.git/ ': server certificate verification failed.CAfile: none CRLfile: none
在使用 git 客户端的主机上信任自签名证书,把证书文件给想克隆仓库文件的主机,再把证书文件内容追加到 /etc/ssl/certs/ca-certificates.crt 文件的最后。
scp gitlab-server:/etc/gitlab/ssl/gitlab.lty.org.crt .
cat gitlab.lty.org.crt >> /etc/ssl/certs/ca-certificates.crt
红帽系统证书路径 /etc/pki/tls/certs/ca-bundle.crt。
gitlab-rails console -e production
User.find_by_username 'root'
user.password="L!@#$%^l"
user.password_confirmation="L!@#$%^l"
user.save
修改完成。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online