一.git核心及常用命令
1. git核心概念
git是分布式版本控制,分布式简单来说就是每个开发者都拥有完整的仓库副本,支持离线操作,而版本控制就是记录文件内容发生的变化,便于回溯历史,协作开发。
2. git分布式版本控制和svn集中式版本控制的区别
git是每个开发者的电脑上都有一个完整的仓库副本,包含所有的代码和完整的历史记录,出同步外大多数操作都不需要联网,操作速度极快,没有绝对“中央”服务器的概念,同时每台电脑上都有完整的仓库副本,增加了容灾能力。
svn是有一个专门的中央服务器,保存所有代码的完成版本历史,所有的开发人员都直接与它交互,几乎所有操作都需要联网,速度较慢,同时极有可能会发生提交冲突,也可能会造成数据丢失。
3. 三大分区
工作区:实际的文件目录
暂存区:准备commit的文件快照
版本库:永久存储的数据结构
4. git工作流程以及常用命令
# 基础工作流
git init # 初始化仓库
git clone <url> # 克隆远程仓库
git add <file> # 添加到暂存区
git commit -m "message" # 提交到版本库
git push origin main # 推送到远程
#撤销/回退
撤销工作区的修改(未add的文件)
git checkout -- <filename> # 撤销指定文件的修改,直接丢弃
git restore <filename> # 撤销修改,更推荐,文件会恢复到暂存区,不会丢弃
撤销暂存区的修改(已add未commit的文件)
git reset HEAD <filename> # 将指定文件从暂存区移回工作区,但保留工作区的修改
git reset HEAD # 将所有文件从暂存区移回工作区
git restore --staged <filename> # 将指定文件从暂存区移回工作区
git restore --staged . # 将所有文件从暂存区移回工作区
撤销提交(已commit的文件)
git reset --soft HEAD~1 #撤销上一次提交,保留修改作为add状态
git reset --hard HEAD~1 #撤销上一次修改,丢弃苏哦有修改
撤销推送(已push的文件)
git revert <commit-hash> #可以通过git log查看一下版本号
# 分支管理
git branch <name> # 创建分支
git checkout <branch> # 切换分支
git merge <branch> # 合并分支
git rebase <branch> # 变基操作
# 状态查看
git status # 查看状态
git log --oneline # 简洁日志
git relog # 引用日志,记录苏哦有操作
git diff # 查看差异

5. git本地库和裸库的区别以及创建命令
本地库:包含工作区,可以查看和编辑文件。工作区就是你能看到和编辑的项目文件本身。.git文件做本版本库"数据库",隐藏在工作区的根目录下。
结构: 你的项目文件夹/ -> 里面是你的代码文件 + 一个隐藏的 `.git/` 文件夹。
创建命令:git init或者git clone
裸库:不包含工作区,不能进行常规文件的编辑和提交,常作为推送的目标。它只有.git文件夹里的内容,村放在你指定的目录下。无法在裸库中进行正常的git操作,因为他没有地方存放你要iu该的文件
结构:你的裸库名.git/ -> 直接就是 branches/, hooks/, objects/, refs/ 等文件夹。
创建命令:git init --bare或者git clone --bare
6. git标签
推荐在每次软件发布时创建标签,能更好的管理版本。
标签主要分为轻量标签和附注标签,辅助标签就是在创建标签时加上描述信息,需要使用GPG签名
标签管理
#创建轻量标签
git tag v1.0.0 #在当前提交上创建
git tag v1.0.0 <commit-hash> #指定提交版本
#创建附注标签
git tag -s v1.0.0 -m "Signed release version 1.0.0"
#查看标签
git show <标签号>
#一次推送所有标签
git push origin --tags
7. git分支
分支:git中分支本质上是一个指向提交的可变指针,通常默认主分支时master或者main分支。
优点:1.成本低:创建分支只需要41字节文件,极快
2.隔离开发:不同功能在不同分支,互不干扰
3.并行工作:团队可以同时开发多个功能
4.安全实验,实验代码可以在独立分支,失败直接丢弃即可
分支管理:
#查看分支
git branch # 查看本地分支
git branch -a # 查看所有分支(包括远程)
git branch -v # 查看分支及其最新提交
#创建分支
git branch feature-auth # 基于当前提交创建分支
git checkout -b feature-payment # 创建并切换到新分支
git branch hotfix a1b2c3d # 基于特定提交创建分支
#切换分支
git checkout main
git switch main # Git 2.23+ 新命令,更安全
git checkout - #切换上一个分支
#删除分支
git branch -d feature-done # 删除已合并的分支
git branch -D feature-experimental # 强制删除未合并的分支
#合并分支
git merge feature-branch #将fearure分支合并到当前分支
注:这些操作可以在gitlab的web界面进行操作哼简单
8. git工作流程
1.从仓库拉取最新代码:git pull origin main
2.创建功能分支,实现开发隔离,互补干扰:git checkout -b <新分支>
3.开发与提交:git add-->git commit -m "描述"
4.发起合并请求
5.代码审查
6.合并并进行构建,测试,部署完成删除分支
9. GitLab的备份和恢复
备份
gitlab-rake gitlab:backup:create
gitlab-backup create
可以通过编辑/etc/gitlab/gitlab.rb配置文件进行备份配置:
# 修改备份路径
gitlab_rails['backup_path'] = "/mnt/gitlab-backups"
# 设置备份保留时间(秒),默认7天
gitlab_rails['backup_keep_time'] = 604800
# 备份时归档权限(建议设置为 0600)
gitlab_rails['backup_archive_permissions'] = 0600
# 包含容器注册表
gitlab_rails['registry_enabled'] = true
# 包含包注册表
gitlab_rails['packages_enabled'] = true
#自动备份:设置定时任务写进计划任务文件
0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1
恢复
sudo gitlab-ctl stop puma #停止相关服务
sudo gitlab-ctl stop sidekiq
sudo gitlab-ctl status # 检查状态
sudo ls -lh /var/opt/gitlab/backups/ #查看备份文件是否存在
# 恢复指定备份(注意:不需要 .tar 扩展名)
sudo gitlab-backup restore BACKUP=1719392752_2024_06_26_15.0.0
# 强制覆盖恢复
sudo gitlab-backup restore BACKUP=1719392752_2024_06_26_15.0.0 force=yes
tar -xzf gitlab-config-1719392752.tar.gz -C / #恢复配置文件
sudo gitlab-ctl reconfigure # 重新配置 GitLab
sudo gitlab-ctl restart #重启
恢复特定内容
sudo gitlab-backup restore BACKUP=1719392752_2024_06_26_15.0.0 SKIP=db #跳过数据库,只恢复文件
二.CI/CD(持续集成/持续交付-持续部署)
持续集成:频繁集成代码到主干,自动化构建和测试,快速发现集成错误
持续交付:代码始终处于可部署状态,手动触发部署,通过所有流程后自动部署到生产环境
1. CI/CD流程
持续集成:开发者推送代码到git仓库,通过jenkins工具从gitlab仓库自动拉取新代码进行编译或构建(maven),通过测试文件进行代码检查和单元测试保证代码质量。
持续交付/部署:打包镜像推送到镜像仓库,自动将新镜像部署到测试环境进行API测试,E2E测试等更全面的测试,最终手动部署到预生产环境,进行最后的质量验证和性能测试,然后发布到生产环境。发布后通过prometheus和elk进行监控,同时要建立回滚机制,遇到问题能够快速回滚到上一个稳定版本。
2. CI/CD优势
1.快速发现问题,即使修改
2.减少集成问题,降低发布风险
3.自动化,提高效率
4.提升软件代码质量和发布信息
三.Jenkins
1. Webhooks(网络钩子)
webhooks相当与一个触发器,比如如果你在jenkins为一个仓库设置了钩子,当仓库发生变化时会自动触发这个钩子,告诉应该做什么,这个在创建webhooks的时候自己定义,比如自动拉取代码进行构建,提高自动化。
2. 构建化参数
构建参数是指在构建之前通过web表单为这次构建传入一些自定义的,动态的值。这些值会在构建过程中作为环境变量被你的构建脚本使用。
优势:提升灵活性。促进协助,可以与钩子结合使用,实现全自动化。
持续更新············


您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。
sd