自动化脚本之Git相关

简介: 自动化脚本之Git相关

自己工作用的 git相关自动脚本

用来还原指定提交中的所有修改文件的脚本

脚本功能介绍

这个脚本是用来还原指定提交中的所有修改文件的。它接受一个参数,就是要还原的提交的哈希值。它会获取指定提交中修改的文件列表,并将这些文件还原到工作目录中,即将这些文件恢复到指定提交的父提交的状态。然后,它会将这些更改添加到暂存区并提交,以完成还原操作。

#!/bin/bash
 
# 检查参数数量
if [ "$#" -ne 1 ]; then
    echo "Usage: $0 <commit-hash>"
    exit 1
fi
 
commit_hash="$1"
 
# 获取指定提交中修改的文件列表
files=$(git show --name-only --pretty=format: "$commit_hash")
 
# 将指定提交中的所有修改文件还原到工作目录
for file in $files; do
    echo "Reverting changes for: $file"
    git checkout "$commit_hash^" -- "$file"
done
 
# 将更改添加到暂存区并提交
#git add .
#git commit -m "Revert changes from commit $commit_hash"
 

使用示例

要运行这个脚本,需要在终端中输入:

bash revert.sh <commit-hash>

例如:

bash revert.sh 3a4b5c6 # 将3a4b5c6提交中的所有修改文件还原

然后就可以看到类似下面的输出:

Reverting changes for: file1.txt
Reverting changes for: file2.txt
Reverting changes for: file3.txt
[master 7d8e9f0] Revert changes from commit 3a4b5c6
 3 files changed, 12 insertions(+), 9 deletions(-)

用来导出指定分支和提交范围内的所有修改文件的脚本

脚本功能介绍

这个脚本是用来导出指定分支和提交范围内的所有修改文件的。它接受两个参数,分别是要导出的分支名和提交哈希值。它会获取指定分支和提交范围内修改的文件列表,并将这些文件复制到一个新建的目录中,目录的名字由分支名和提交哈希值组成。如果文件在指定的提交中被删除了,就跳过该文件。

 

#!/bin/bash
 
if [ $# -ne 2 ]; then
  echo "Usage: $0 <branch> <commit_hash>"
  exit 1
fi
 
branch="$1"
commit_hash="$2"
export_dir="exported_files_${branch}_${commit_hash}"
 
files_to_export=$(git diff-tree --no-commit-id --name-only -r ${branch}~${commit_hash})
 
mkdir -p "$export_dir"
 
for file in $files_to_export; do
  file_dir=$(dirname "${export_dir}/${file}")
  mkdir -p "$file_dir"
  git show ${branch}:${commit_hash}^ -- "$file" > "${export_dir}/${file}" 2> /dev/null || echo "Skipped deleted file: $file"
done
 
echo "Files exported to $export_dir"

使用示例

要运行这个脚本,需要在终端中输入:

bash export.sh <branch> <commit_hash>

例如:

bash export.sh master 3a4b5c6 # 将master分支上3a4b5c6之前的所有修改文件导出

然后就可以看到类似下面的输出:

Skipped deleted file: file1.txt
Files exported to exported_files_master_3a4b5c6

用来生成所有分支上的所有唯一提交的补丁文件的脚本

脚本功能介绍

这个脚本是用来生成所有分支上的所有唯一提交的补丁文件的。它不接受任何参数。它会遍历所有的分支,并获取每个分支上的提交列表,然后对每个提交进行处理。如果一个提交已经被处理过,就跳过它;如果一个提交的消息中包含"init",就跳过它;如果一个提交是孤立的,就跳过它;如果一个提交修改了超过100个文件,就跳过它;如果一个提交的二进制差异超过10MB,就跳过它。对于其他的提交,它会生成一个补丁文件,并保存到patches目录下,以分支名和提交消息为子目录和文件名。

使用示例

要运行这个脚本,只需要在终端中输入:

bash generate_patches.sh

然后就可以看到类似下面的输出:

Skipped patch with 'init' in commit message: init project
Skipped patch with more than 100 files changed: patches/master/add_some_features.patch
Skipped patch larger than 10MB: patches/dev/fix_some_bugs.patch
Skipped orphan commit: test orphan commit

在patches目录下,可以看到类似下面的结构:

patches/
├── master
│   ├── add_some_features.patch
│   └── update_readme.patch
└── dev
    ├── fix_some_bugs.patch
    └── refactor_code.patch


相关文章
|
2月前
|
运维 安全 Devops
DevOps实践:自动化部署的脚本编写技巧
【9月更文挑战第24天】在DevOps文化中,自动化部署是提升效率、减少人为错误的关键。本文将引导读者了解自动化部署脚本的编写方法,从基础命令到复杂逻辑,逐步深入。你将学会如何用代码简化日常任务,让重复工作变得轻松愉快。让我们一起探索自动化的世界,释放你的创造力!
|
2天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
13 2
|
6天前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。
|
7天前
|
运维 监控 Linux
自动化运维:如何利用Python脚本优化日常任务##
【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
|
11天前
|
运维 Prometheus 监控
自动化运维之路:从脚本到DevOps
【10月更文挑战第25天】在数字化时代的浪潮中,运维不再是简单的服务器管理,而是成为了企业竞争力的核心。本文将带你走进自动化运维的世界,探索如何通过技术手段提升效率和稳定性,以及实现快速响应市场的能力。我们将一起学习如何从基础的脚本编写进化到全面的DevOps实践,包括工具的选择、流程的优化以及文化的建设。无论你是运维新手还是资深专家,这篇文章都将为你提供有价值的见解和实用的技巧。
14 3
|
13天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
17 1
|
30天前
|
测试技术 开发工具 git
利用Git Hooks自动化你的开发流程
【10月更文挑战第6天】在现代软件开发中,版本控制至关重要,Git作为主流工具,提供了强大的代码管理功能。Git Hooks 是 Git 的一个特性,可在特定事件(如提交、推送)发生时自动执行脚本,实现开发流程自动化。本文介绍 Git Hooks 的基本概念、常见用例及设置方法,涵盖 pre-commit、pre-push 等多种类型的 Hooks,并展示了如何利用它们进行代码格式化、自动化测试和风格检查,提升开发效率与代码质量。通过合理应用 Git Hooks,可以显著减少人为错误,确保代码一致性,并促进团队协作。
|
29天前
|
人工智能 运维 Devops
自动化运维之路:从脚本到DevOps的转变
【10月更文挑战第7天】在这篇文章中,我们将一起探索自动化运维的演变历程,从最初的简单脚本到现代的DevOps实践。我们将深入理解自动化如何改变了运维工作的本质,并讨论实现这一转变的关键技术和策略。文章将不包含代码示例,而是聚焦于理念、工具和方法论的介绍,旨在为读者提供一个全面的自动化运维框架视图。
|
28天前
|
人工智能 运维 监控
自动化运维:从脚本到工具的演变之路
【10月更文挑战第8天】在数字化时代的浪潮中,运维不再是简单的硬件维护,它已经演变成一场关于效率、稳定性和创新的技术革命。本文将带您领略自动化运维的魅力,从最初的脚本编写到现代复杂的自动化工具,我们将一探究竟,看看这些工具如何帮助运维人员简化日常任务,提升工作效率,并最终推动业务发展。
|
1月前
|
XML 前端开发 数据格式
Ruby脚本:自动化网页图像下载的实践案例
Ruby脚本:自动化网页图像下载的实践案例
下一篇
无影云桌面