优化Git工作流:自定义操作实现SourceTree无缝获取TortoiseGit日志格式

215 阅读3分钟

背景

在现代软件开发中,版本控制系统如Git已成为不可或缺的工具。然而,不同的团队和项目可能会使用不同的Git客户端,这有时会导致工作流程的不一致。本文将介绍一个解决SourceTree和TortoiseGit日志格式差异的自动化解决方案。

在我的日常开发中,我偏好使用SourceTree进行Git操作。然而,我司要求在解决JIRA问题时,使用TortoiseGit的"Show Log -> Full data"格式来提交日志。这就导致很多时候需要在两种Git工具之间频繁切换,工作流不够丝滑。 看到Sourcetree的自定义操作功能,想到能否开发一个脚本,先拉取到标准格式的git log,然后转换成TortoiseGit的样式,以此来消除对TortoiseGit的依赖,合并工作流。

实践成功,遂分享给大家。

解决方案

利用SourceTree的自定义操作功能,我开发了一个脚本来自动化实现这个过程。这个脚本能够实现:

  • 获取标准格式的Git日志
  • 将其转换为TortoiseGit所要求的格式,并自动复制到剪切板
  • 无缝集成到SourceTree的工作流中

脚本内容

脚本使用批处理(.bat)格式编写,主要功能包括:

  • 接收Git提交的SHA值
  • 提取相关的提交信息
  • 按照TortoiseGit的格式重新组织信息
  • 输出格式化后的日志并复制到剪切板
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

if "%~1"=="" (
    echo 错误:请提供 Git commit SHA 作为参数。
    echo 用法:%0 [commit SHA]
    exit /b 1
)

set "sha=%~1"
set "tempfile=%temp%\git_log_temp.txt"
set "finalfile=%temp%\git_log_final.txt"

:: 获取提交信息
git log -1 --pretty=format:"Revision: %%H%%nAuthor: %%an <%%ae>%%nDate: %%ad%%nMessage:%%n%%B" --date=format:"%%Y/%%m/%%d %%H:%%M:%%S" %sha% > "%tempfile%"

echo ---- >> "%tempfile%"

:: 获取并处理文件变更信息
for /f "tokens=1,*" %%a in ('git show --name-status --format^="" %sha%') do (
    set "status=%%a"
    set "file=%%b"
    if "!status!"=="M" (
        echo Modified: !file! >> "%tempfile%"
    ) else if "!status!"=="A" (
        echo Added: !file! >> "%tempfile%"
    ) else if "!status!"=="D" (
        echo Deleted: !file! >> "%tempfile%"
    ) else (
        echo !status! !file! >> "%tempfile%"
    )
)

:: 删除所有空行并保存到最终文件
findstr /v /r "^$" "%tempfile%" > "%finalfile%"

:: 显示处理后的内容
type "%finalfile%"

:: 将处理后的内容复制到剪贴板
type "%finalfile%" | clip

:: 清理临时文件
del "%tempfile%"
del "%finalfile%"

echo.
echo log full data 已复制到剪贴板。


SourceTree集成步骤

  1. 打开SourceTree,进入"工具" -> "选项"菜单
  2. 导航至"自定义操作"页面
  3. 添加新的自定义操作:
    • 指定脚本文件路径
    • 设置$SHA参数,使脚本能在特定提交上执行
    • 配置脚本在右键菜单中的显示名称
    • 配置完成后,用户可以在任意提交记录上右键,选择自定义操作来执行脚本 企业微信截图_17346734877929.png

结语

仓鼠目前工作时间一年多,在大学自学期间整理了90w字的知识库,涵盖数据结构与算法,JDK源码分析,并发编程,JVM,常用数据库,操作系统,计算机基础,计算机网络,架构设计,设计模式,场景设计,等等,相对比较全面。最近在利用业余时间,结合工作后的全新视野,对已有知识库进行深度重构,最近也会陆陆续续发一些文章,希望与各位共同探讨。