快速体验
- 打开 InsCode(快马)平台 https://www.inscode.net
- 输入框内输入如下内容:
使用Shell脚本快速实现一个Git预检查钩子。在每次执行'git checkout'前触发,检查工作目录和暂存区状态。如果有未提交的修改,暂停操作并显示彩色提示信息,列出具体的修改文件。提供继续切换(放弃修改)、提交后切换或取消操作的选项。添加简单的日志功能记录这些事件。 - 点击'项目生成'按钮,等待项目生成完整后预览效果
作为开发者,我们经常在Git分支间切换时遇到这样的尴尬:未提交的修改被意外覆盖,或者切换分支失败才发现有未保存的变更。今天分享一个快速实现的解决方案——用Shell脚本给Git加个安全检查小助手。
为什么需要预检查工具
- 常见痛点:本地修改经常在
git checkout时被静默覆盖,特别是紧急切换分支时容易忽略变更 - 现有方案不足:Git自带的
stash需要手动操作,而--force选项又过于粗暴 - 原型价值:15分钟验证方案可行性,后期可扩展为正式Git钩子
核心功能设计
- 触发机制:通过Git别名覆盖原生命令,在
git checkout前插入检查逻辑 - 状态检测:解析
git status --porcelain输出判断是否有未跟踪/已修改文件 - 交互流程:
- 发现变更时显示红色警告和文件列表
- 提供三个选项:
- 放弃修改继续切换(
git stash) - 提交后再切换(引导用户走标准提交流程)
- 取消当前操作
- 放弃修改继续切换(
- 日志记录:在
~/.git_safety.log记录每次检查事件和用户选择
关键技术实现
- 颜色输出:用
tput实现终端彩色文字,比如红色警告和绿色成功提示 - 选项处理:通过
read -p实现简单的用户交互菜单 - 安全覆盖:将原生命令保存为
_git避免递归调用 - 兼容性:处理文件名含空格等特殊字符的情况
实际使用效果
当执行git checkout feature-branch时:
- 如果工作区干净,直接完成切换
- 检测到修改时会显示:
⚠️ 发现未提交的修改: - src/main.js (modified) - config.yaml (untracked) 请选择: 1. 暂存变更并切换(推荐) 2. 提交后再切换 3. 取消操作 - 选择后自动执行对应操作并记录日志
优化方向
- 增强版:可以加入自动stash命名、分支白名单等功能
- 可视化:用dialog库实现更友好的GUI界面
- 团队共享:改造成正式的Git钩子脚本供项目组使用
这个快速原型验证了方案的可行性,整个过程使用基础Shell语法实现,无需额外依赖。我在InsCode(快马)平台测试时,发现它的在线Shell环境特别适合这种小工具开发——写完直接就能试,不用折腾本地环境。
对于需要持续运行的服务,平台的一键部署功能也很省心。像这种工具类脚本虽然本身不需要部署,但开发过程中用它的即开即用特性来做快速验证确实效率翻倍。
快速体验
- 打开 InsCode(快马)平台 https://www.inscode.net
- 输入框内输入如下内容:
使用Shell脚本快速实现一个Git预检查钩子。在每次执行'git checkout'前触发,检查工作目录和暂存区状态。如果有未提交的修改,暂停操作并显示彩色提示信息,列出具体的修改文件。提供继续切换(放弃修改)、提交后切换或取消操作的选项。添加简单的日志功能记录这些事件。 - 点击'项目生成'按钮,等待项目生成完整后预览效果
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考