Skip to content

自己写的一个push脚本,清晰简化本地push的流程

License

Notifications You must be signed in to change notification settings

Zengwenliang0416/push-bash

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

目录

优化Git提交脚本

背景

在日常开发中,我们经常需要提交代码到Git仓库。为了规范提交信息格式,提高提交效率,同时避免提交过程中的错误,我们开发了这个Git提交脚本。

主要功能

1. 文件暂存方式选择

  • 一键添加所有更改(git add .
  • 交互式选择更改(git add -p
  • 选择已更改的文件(交互式列表选择)
    • 显示所有已更改文件的编号列表
    • 支持选择多个文件(用空格分隔文件编号)
    • 支持一键选择所有文件(输入 'a')
  • 自动处理未暂存更改
    • 检测到未暂存更改时自动暂存
    • 支持选择提交类型和表情
    • 自动生成包含更改文件列表的提交信息

2. 智能分支同步处理

  • 自动检测本地和远程分支的分叉状态
  • 显示具体的领先/落后提交数量
  • 提供多种同步选项:
    • 合并远程更改(git merge
    • 变基到远程更改(git rebase
    • 强制推送本地更改(git push --force
  • 智能建议:当本地落后较多时,自动建议使用变基
  • 冲突处理指导:遇到冲突时提供清晰的后续步骤说明

3. 规范化的提交信息

提供预定义的提交类型:

选项 类型 说明 使用场景
1 ✨ feat 新功能 添加新的功能或特性
2 🐛 fix 修复问题 修复 bug 或问题
3 📝 docs 文档更新 更新文档或注释
4 🎨 style 代码格式 不影响代码逻辑的格式修改
5 ♻️ refactor 代码重构 既不修复错误也不添加功能的代码更改
6 ⚡️ perf 性能优化 提高性能的代码更改
7 ✅ test 测试相关 添加或修改测试用例
8 🔧 chore 构建相关 修改构建过程或辅助工具
9 🚀 ci CI/CD相关 持续集成和部署相关更改
10 🔒 security 安全更新 安全相关的改进或修复
11 📌 deps 依赖更新 更新项目依赖
12 🌐 i18n 国际化 国际化和本地化相关更改
13 ✍️ typo 拼写修正 修正拼写错误
14 ⏪️ revert 回退更改 回退之前的提交
15 🔀 merge 合并分支 合并分支的提交
16 🏷️ release 发布版本 发布新版本相关更改
17 🚀 deploy 部署相关 部署相关的更改
18 🎨 ui 界面相关 用户界面相关更改
0 💾 custom 自定义格式 用户自定义提交类型

4. 自定义提交格式

当选择自定义格式时,可以选择以下表情:

  • 🎨 改进代码结构/格式
  • ⚡️ 提升性能
  • 🔥 删除代码/文件
  • 🐛 修复 bug
  • 🚑️ 重要补丁
  • ✨ 引入新功能
  • 📝 撰写文档
  • 🚀 部署功能
  • 💄 UI/样式更新
  • 🎉 初次提交
  • ✅ 增加测试
  • 🔒️ 修复安全问题
  • 🔐 添加或更新密钥
  • 🔖 发布/版本标签
  • 🚨 修复编译器/linter警告
  • 🚧 工作进行中
  • 💚 修复CI构建问题
  • ⬇️ 降级依赖
  • ⬆️ 升级依赖
  • 📌 固定依赖版本
  • 👷 添加CI构建系统
  • 📈 添加分析或跟踪代码
  • ♻️ 重构代码
  • ➕ 添加依赖
  • ➖ 删除依赖
  • 🔧 修改配置文件
  • 🔨 重大重构
  • 🌐 国际化与本地化
  • ✏️ 修复拼写错误
  • 💩 需要改进的代码
  • ⏪️ 回退更改
  • 🔀 合并分支
  • 📦️ 更新编译文件
  • 👽️ 更新外部API
  • 🚚 移动/重命名文件
  • 📄 添加许可证
  • 💥 重大更改
  • 🍱 添加资源
  • ♿️ 提高可访问性
  • 🔊 添加日志
  • 🔇 删除日志

5. 错误处理和状态跟踪

  • 检查Git仓库有效性
  • 自动检查并同步远程仓库更新:
    • 检测本地与远程仓库的差异
    • 如果远程有更新,自动拉取更新
    • 如果发生分支分叉,提示手动解决冲突
  • 记录操作状态:
    • 文件暂存状态
    • 提交状态
    • 提交哈希
    • 目标分支
    • 提交信息
  • 网络问题时提供恢复建议

提交历史管理功能

为了更好地管理Git提交历史,脚本新增了以下功能:

  1. 查看提交历史

    • 可以查看最近的提交记录(默认显示最近10条)
    • 提供格式化的输出,包含提交哈希、分支信息、提交信息、提交时间和作者
    • 支持自定义显示条数
  2. 搜索提交

    • 根据关键词搜索提交记录
    • 支持在提交信息中进行全文搜索
    • 显示匹配的提交记录(最多50条)
  3. 查看提交详情

    • 输入提交哈希查看详细信息
    • 显示完整的提交信息、作者信息、提交时间
    • 显示具体的文件变更
  4. 撤销提交

    • 支持撤销指定的提交
    • 提供确认机制防止误操作
    • 使用git revert确保安全的撤销操作

使用方法

在运行脚本后,会显示主菜单,包含以下选项:

  1. 提交更改(原有功能)
  2. 查看提交历史
  3. 搜索提交
  4. 查看提交详情
  5. 撤销提交
  6. 退出

选择相应的功能后,按照提示进行操作即可。

示例

  1. 查看最近提交

    # 选择选项2后,可以指定要查看的提交数量
    请选择操作 (1-6): 2
    查看最近几条记录 (默认10): 5
  2. 搜索提交

    # 选择选项3后,输入搜索关键词
    请选择操作 (1-6): 3
    请输入搜索关键词: feat
  3. 查看提交详情

    # 选择选项4后,输入提交哈希
    请选择操作 (1-6): 4
    请输入提交哈希: abc123
  4. 撤销提交

    # 选择选项5后,输入要撤销的提交哈希
    请选择操作 (1-6): 5
    请输入要撤销的提交哈希: abc123
    确认撤销? (y/n): y

注意事项

  1. 撤销提交时请谨慎操作,确保了解要撤销的内容
  2. 建议在撤销提交前先查看提交详情
  3. 搜索功能支持多个关键词,但要注意搜索范围限制

脚本修改历史

提交时间 提交说明 提交者 提交哈希
7分钟前 feat: ✨ 添加Windows下的提交历史和管理功能 Zengwenliang0416 b65e681
11分钟前 feat: ✨ 添加Linux/mac下的提交历史和管理功能 Zengwenliang0416 331fca0
10小时前 fix: 🐛 终端中文显示问题 Zengwenliang0416 8f838ba
10小时前 fix: 🐛 git status下中文显示为数字的修改方案和修改措施 Zengwenliang0416 1717821
10小时前 docs: 📝 优化脚本并且添加操作教程 Zengwenliang0416 2ea4ddb
11小时前 docs: 📝 优化windows下的push脚本 Zengwenliang0416 492cb13
11小时前 doc: 📝 push脚本优化 Zengwenliang0416 09c492d
11小时前 docs: 📝 添加表情信息在message中 Zengwenliang0416 9dbf2eb
11小时前 refactor(git脚本): ♻️ 优化push操作 Zengwenliang0416 9ef0b0c
11个月前 初始化JVM文档以及测试Linux下的push脚本 Zengwenliang0416 44edb13
11个月前 添加一键实现add、commit、push脚本 Zengwenliang0416 32c9ac0

主要更新内容

  1. 功能增强

    • 添加Windows和Linux/Mac下的提交历史管理功能
    • 实现提交历史查看、搜索和撤销功能
    • 添加交互式文件选择功能
  2. 问题修复

    • 解决终端中文显示问题
    • 修复git status下中文显示为数字的问题
    • 优化字符编码处理
  3. 文档改进

    • 添加详细的操作教程
    • 优化提交信息格式
    • 添加表情符号支持
  4. 代码重构

    • 优化push操作流程
    • 改进代码结构和组织
    • 提升代码可维护性

使用说明

基本用法

  1. 在Git仓库目录下运行脚本:

    • Windows: push.bat
    • Linux/macOS: ./push.sh
  2. 选择文件暂存方式:

    请选择提交方式:
    1. 提交所有更改 (git add .)
    2. 交互式选择文件 (git add -p)
    3. 手动输入文件路径
    
  3. 选择提交类型:

    请选择提交类型:
    1. feat: ✨ 新功能
    2. fix: 🐛 修复bug
    ...
    21. custom: 🎯 自定义格式
    
  4. 如果选择自定义格式,可以选择表情:

    请选择emoji:
    1. 🎨 艺术     2. 🌟 闪耀     3. 🚀 火箭
    4. 🎯 目标     5. 🎬 电影     6. 🎮 游戏
    7. 📱 手机     8. 💻 电脑     9. 🌈 彩虹
    
  5. 输入提交描述和分支名称

自动更改处理

  1. 当检测到未暂存的更改时,脚本会:

    • 自动暂存所有更改
    • 提示选择提交类型(包含表情)
    • 自动生成包含时间戳和更改文件列表的提交信息
  2. 当检测到分支分叉时,脚本会:

    • 显示本地和远程的提交差异数量
    • 根据情况推荐最佳同步方式
    • 提供多个同步选项供选择
    • 在执行危险操作(如强制推送)时提供警告和确认

错误恢复

当遇到网络问题时,脚本会显示:

  1. 当前操作状态

    === 操作状态 ===
    1. 文件暂存: true/false
    2. 更改提交: true/false
    3. 提交哈希: [如果有]
    4. 目标分支: [分支名]
    5. 提交信息: [提交信息]
    
  2. 恢复建议

    • 如果已经提交:
      您的更改已经提交到本地仓库。要重新推送,请执行:
      git push origin [分支名]
      
      如果想要撤销提交,请执行:
      git reset --soft HEAD^
      
    • 如果只是暂存:
      文件已暂存但未提交。要继续,请执行:
      git commit -m "[提交信息]"
      git push origin [分支名]
      
      如果想要撤销暂存,请执行:
      git reset
      

环境变量配置

为了能够在任何目录下使用这些脚本,我们需要将脚本添加到系统的环境变量中。以下是不同操作系统的配置方法:

Windows 系统配置

  1. 准备工作

    • push.bat 脚本放在一个固定的目录中,建议放在:C:\Tools\Git-Scripts\
    • 确保脚本具有可执行权限
  2. 添加到系统环境变量

    • 右键点击"此电脑",选择"属性"
    • 点击"高级系统设置"
    • 点击"环境变量"按钮
    • 在"系统变量"区域找到"Path"
    • 点击"编辑",然后点击"新建"
    • 添加脚本所在的目录路径:C:\Tools\Git-Scripts
    • 点击"确定"保存所有更改
  3. 创建命令别名(可选)

    • 创建一个新文件 C:\Tools\Git-Scripts\git-push.bat
    @echo off
    push.bat %*
    • 这样可以通过 git push 命令调用脚本
  4. 验证配置

    • 打开新的命令提示符窗口
    • 输入 pushgit push
    • 如果配置正确,脚本应该能够正常执行

macOS/Linux 系统配置

  1. 准备工作

    • push.sh 脚本放在一个固定的目录中,建议放在:~/bin//usr/local/bin/
    • 给脚本添加执行权限:
    chmod +x ~/bin/push.sh
  2. 配置方法(推荐:使用软链接)

    这是最推荐的配置方法,可以保持脚本的单一性和易更新性:

    # 创建个人bin目录(如果不存在)
    mkdir -p ~/bin
    
    # 创建软链接
    ln -s /path/to/your/push.sh ~/bin/push.sh

    然后在 ~/.zshrc(如果使用zsh)或 ~/.bashrc(如果使用bash)中添加:

    # 添加个人脚本目录到 PATH
    export PATH="$HOME/bin:$PATH"
    
    # 可选:创建别名使命令更简短
    alias git-push="push.sh"

    使配置生效:

    source ~/.zshrc  # 如果使用zsh
    #
    source ~/.bashrc # 如果使用bash

    为什么推荐使用软链接?

    • 源文件可以保持在原始位置(如项目目录中)
    • 当更新原始脚本时,软链接会自动指向最新版本
    • 不需要手动同步或更新其他位置的副本
    • 避免了文件版本不一致的问题
    • 方便进行版本控制
  3. 其他配置方法(不推荐)

    a. 直接添加脚本目录到 PATH:

    export PATH="/path/to/your/script/directory:$PATH"

    缺点:

    • PATH 可能会变得过长
    • 不够灵活,如果脚本位置改变需要更新配置

    b. 复制到系统目录(不推荐):

    sudo cp push.sh /usr/local/bin/

    缺点:

    • 需要手动同步更新
    • 可能引起版本不一致问题
    • 需要管理员权限
  4. 验证配置

    # 检查软链接是否创建成功
    ls -l ~/bin/push.sh
    
    # 检查命令是否可用
    which push.sh
    
    # 测试脚本执行
    push.sh --version  # 或其他测试命令
  5. 故障排除

    • 如果命令未找到,检查 PATH 配置:
      echo $PATH | grep ~/bin
    • 检查软链接是否正确:
      ls -l ~/bin/push.sh
    • 检查脚本权限:
      ls -l /path/to/your/push.sh
    • 如果使用别名,检查别名是否正确设置:
      alias | grep git-push
  6. 维护建议

    • 定期检查软链接是否完好
    • 在更新脚本后测试功能
    • 保持原始脚本和软链接的权限正确
    • 在项目文档中记录配置方法

故障排除

  1. Windows 常见问题

    • 如果提示"不是内部或外部命令",检查环境变量路径是否正确
    • 确保脚本文件扩展名 .bat 已添加到 PATHEXT 环境变量中
    • 重启命令提示符或PowerShell以使更改生效
  2. macOS/Linux 常见问题

    • 如果提示"权限拒绝",检查脚本的执行权限
    • 如果找不到命令,确认 PATH 中包含脚本所在目录
    • 检查文件换行符格式(Windows 下编辑的文件可能需要转换):
    dos2unix push.sh
  3. 通用问题

    • 确保 Git 已正确安装并可在命令行中使用
    • 检查脚本文件的编码(建议使用 UTF-8)
    • 验证脚本所在目录的权限设置

使用建议

  1. 目录组织

    • 建议将所有 Git 相关的自定义脚本放在同一个目录下
    • 保持脚本文件名简短但具有描述性
    • 为不同功能的脚本创建子目录
  2. 权限管理

    • Windows:确保用户对脚本目录有读取和执行权限
    • macOS/Linux:建议将脚本权限设置为 755(chmod 755 script.sh
  3. 备份建议

    • 定期备份脚本文件
    • 将脚本纳入版本控制
    • 记录配置更改

问题修复记录

中文路径显示问题

在显示Git状态时,中文文件名会显示为转义字符(如 \345\255\246\344\271\240)。这是因为Git默认会对非ASCII字符进行转义。

解决方法:

# 设置Git不对中文文件名转义
git config --global core.quotepath false

这个设置已经添加到 push.shpush.bat 脚本的开头,确保中文文件名能够正确显示。

终端输入处理优化

在脚本交互过程中,输入中文字符时可能会遇到以下问题:

  1. 删除中文字符时显示异常
  2. 删除操作可能会影响到提示文字
  3. Windows下中文输入显示乱码

解决方法:

  1. Linux/macOS (push.sh):

    # 使用 read 命令的 -e 选项启用 readline 功能
    # 使用 -p 选项显示提示符
    read -e -p "请输入: " input
    • -e 选项启用 readline 功能,支持命令行编辑
    • -p 选项显示提示符,且提示符不会被删除操作影响
  2. Windows (push.bat):

    :: 使用 PowerShell 处理输入,支持更好的中文处理
    powershell -Command "$input = Read-Host '请输入'; $input" > "%TEMP%\input.txt"
    set /p input=<"%TEMP%\input.txt"
    del "%TEMP%\input.txt"
    • 使用 PowerShell 的 Read-Host 命令处理输入
    • 通过临时文件传递输入内容
    • 支持完整的中文字符处理

Shell 兼容性问题

在不同的 Shell 环境中,某些字符串操作的语法可能不兼容。例如,将字符串转换为小写的 ${variable,,} 语法只在 Bash 4.0+ 版本中支持。

问题表现:

./push.sh: line 252: ${confirm,,}: bad substitution

解决方法: 使用更通用的 tr 命令进行大小写转换:

# 不兼容的写法
if [ "${confirm,,}" != "y" ]; then

# 兼容的写法
if [ "$(echo "$confirm" | tr '[:upper:]' '[:lower:]')" != "y" ]; then

这个修改确保脚本能在各种 Shell 环境(如 bash、sh、zsh 等)下正常运行。

注意事项

  1. 确保脚本具有执行权限(Linux/macOS):
    chmod +x push.sh
  2. Windows用户需要安装Git Bash或在命令提示符中运行
  3. 脚本必须在Git仓库目录下运行
  4. 建议定期更新脚本以获取最新功能

常见问题

Q1: 为什么选择交互式添加文件?

A1: 交互式添加可以精确控制要提交的更改,避免提交不必要的文件。

Q2: 提交失败后如何处理?

A2: 脚本会显示当前状态和恢复建议,按照提示执行相应命令即可。

Q3: 如何修改默认的提交类型?

A3: 可以编辑脚本中的提交类型数组来自定义默认选项。

后续优化方向

  1. 功能增强

    • 配置文件支持
      • 可自定义提交类型和表情
      • 可配置默认分支和远程仓库
      • 支持项目级别的配置文件
    • 提交模板系统
      • 支持自定义提交模板
      • 支持不同项目使用不同模板
      • 模板变量替换功能
    • 批量操作支持
      • 批量提交管理
      • 批量撤销功能
      • 批量查看历史
  2. 用户体验优化

    • 图形界面支持
      • 简单的GUI界面
      • 文件树形显示
      • 可视化的提交历史
    • 智能提示
      • 自动补全功能
      • 智能提交信息建议
      • 错误预防提示
    • 多语言支持
      • 完整的国际化支持
      • 可切换的界面语言
      • 提交信息的多语言模板
  3. 集成增强

    • CI/CD集成
      • 与常见CI系统集成
      • 自动化测试集成
      • 发布流程集成
    • IDE插件支持
      • VS Code插件
      • IntelliJ插件
      • 其他主流IDE支持
    • 项目管理工具集成
      • Jira集成
      • Trello集成
      • GitHub/GitLab集成
  4. 性能优化

    • 大型仓库支持
      • 优化大文件处理
      • 提高历史查询速度
      • 减少内存占用
    • 并行处理
      • 并行提交处理
      • 异步历史查询
      • 后台任务处理
    • 缓存机制
      • 提交历史缓存
      • 配置信息缓存
      • 智能缓存清理
  5. 安全性增强

    • 提交验证
      • 敏感信息检查
      • 提交规范验证
      • 自动化代码审查
    • 权限管理
      • 用户权限控制
      • 分支权限管理
      • 操作审计日志
    • 备份机制
      • 自动本地备份
      • 远程备份支持
      • 恢复机制

Git Push 自动化脚本

这是一个用于自动化 Git 操作的 Bash 脚本,它可以智能处理各种常见的 Git 场景,让你的工作流程更加顺畅。

功能特点

  1. 智能提交管理

    • 自动检测未暂存的更改
    • 提供标准化的提交类型选择(带表情符号)
    • 自动暂存和提交更改
  2. 远程仓库同步

    • 自动检测远程仓库更新
    • 智能处理分支分叉情况
    • 支持多种同步策略(合并、变基、强制推送)
  3. 错误处理

    • 自动处理常见的 Git 错误
    • 提供清晰的错误提示和恢复建议
    • 防止意外的数据丢失

使用方法

基本使用

  1. 将脚本添加到你的 PATH 中
  2. 在任何 Git 仓库中运行 git-push 命令
  3. 脚本会自动检测并处理当前状态

提交流程

  1. 检测到未暂存的更改时:

    • 显示更改的文件列表
    • 提供提交类型选择菜单
    • 要求输入提交描述
    • 自动暂存和提交更改
  2. 提交类型选项:

    1) ✨ feat: 新功能
    2) 🐛 fix: 修复
    ...
    21) custom: 🎯 自定义格式
    
  3. 分支同步处理

当本地分支与远程分支分叉时,脚本提供以下选项:

  1. 合并远程更改 (git merge)

    • 适用于希望保留完整历史记录的情况
    • 可能会产生额外的合并提交
  2. 变基到远程更改 (git rebase)

    • 创建更清晰的提交历史
    • 适合在个人分支上使用
  3. 强制推送本地更改 (git push --force-with-lease)

    • 使用 --force-with-lease 确保安全
    • 适用于确定要覆盖远程更改的情况
  4. 退出并手动处理

    • 当需要更复杂的处理时使用
    • 可以手动解决后再次运行脚本

常见问题及解决方案

1. 提交信息问题

问题:提交信息中包含了菜单和提示内容 解决方案

  • 将所有菜单和提示输出重定向到 stderr
  • 使用 printf 代替 echo 输出选择的前缀
  • 简化提交信息的格式

2. 分支分叉处理

问题:在有未暂存更改时尝试变基导致错误 解决方案

  • 先检测并处理未暂存的更改
  • 然后再处理分支分叉情况
  • 使用 --force-with-lease 代替 --force 确保安全

3. 输入输出处理

问题:用户输入和脚本输出混杂在一起 解决方案

  • 使用 /dev/tty 确保正确读取用户输入
  • 将提示信息重定向到 stderr
  • 只让实际的提交信息输出到 stdout

最佳实践

  1. 提交前检查

    • 查看更改的文件列表
    • 确保提交描述准确反映更改内容
    • 选择合适的提交类型
  2. 分支同步策略

    • 个人分支优先使用变基
    • 共享分支优先使用合并
    • 谨慎使用强制推送
  3. 冲突处理

    • 遇到冲突时先退出脚本
    • 手动解决冲突
    • 解决后重新运行脚本

贡献

欢迎提交 Issue 和 Pull Request 来改进这个脚本。

许可证

MIT License

About

自己写的一个push脚本,清晰简化本地push的流程

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published