自研导出 git 版本差异到剪贴板工具

简介: 由于项目组规定每次发布版本需要记录文件变动差异,于是乎自学了一些 Windows 批处理内容,写了个批处理脚本方便统计。

由于项目组规定每次发布版本需要记录文件变动差异,于是乎自学了一些 Windows 批处理内容,写了个批处理脚本方便统计。

介绍



导出 git 版本差异到剪贴板


使用说明



支持交互式或 cmd 命令行中执行: 导出 git 版本差异到剪贴板.cmd


示例


D:\gitlab\abcProject "669ae28118f1b67fd45^^" 669ae28118f1b67fd


项目地址



ac86/my-cmd - 码云


https://gitee.com/kaiLee/my-cmd/


源码展示


@REM ----------------------------------------------------------------------------
@REM 导出git版本差异到剪贴板 Start Up Batch script
@REM
@REM Required vars:
@REM g_dir - git 仓库地址; 注意在交互式使用中该路径不能前后带空格!
@REM g_src - 原 commit ID; 注意在cmd命令行使用^等特殊符号需要整个字符串用双引号包裹,本身使用需要使用进行转义!
@REM g_target - 目标 commit ID;
@REM
@REM fixed 缺陷 1: git 导出命令,解决 git diff 导出文本会乱码的问题;
@REM 缺陷 2: 通过命令行启动,不支持带有空格的项目名。需要使用 subst w: "D:\Program Files\" 这种折中方案;
@REM 
@REM e.g. 支持交互式或cmd命令行中执行: 导出git版本差异到剪贴板V3.cmd D:\gitlab\preser-warn "669ae28118f1b67fd45^^" 669ae28118f1b67fd 
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case ECHO is 'on'
@ECHO OFF
@setlocal EnableDelayedExpansion
CHCP 65001 >NUL
@REM set title of command window
title %0
SET g_dir=%1
IF "%g_dir%" == "" (
  SET /p g_dir="请输入 git 仓库地址:[默认=%CD%]"
  @REM 录入不为空则应用
  IF "!g_dir!" == "" SET g_dir="%CD%"
)
:loop1
IF NOT EXIST "%g_dir%" (
  SET /p g_dir="%g_dir% 非有效目录, 请重录仓库地址: "
  GOTO :loop1
)
IF NOT EXIST "%g_dir%\.git\" (
  SET /p g_dir="%g_dir% 非有效项目, 请重录仓库地址: "
  GOTO :loop1
) 
cd /d %g_dir%
ECHO 仓库地址=%g_dir% & ECHO.
SET g_src=%2
IF "%g_src%" == "" SET /p g_src="请输入原分支名或commit ID[默认=dev]: "
IF "%g_src%" == "" SET g_src="dev"
:loop2
git log %g_src% -1 --pretty=format:%h >NUL 2>NUL
IF ERRORLEVEL 1 (
  SET /p g_src="%g_src% 原节点非有效, 请重新录入: "
  GOTO :loop2
)
ECHO 原分支名=%g_src% & ECHO.
SET g_target=%3
IF "%g_target%" == "" SET /p g_target="请输入目标分支名或commit ID[默认=HEAD]: 
IF "%g_target%" == "" SET g_target="HEAD"
:loop3
git log %g_target% -1 --pretty=format:%h >NUL 2>NUL
IF ERRORLEVEL 1 (
  SET /p g_target="%g_target% 目标节点非有效, 请重新录入: "
  GOTO :loop3
)
ECHO 目标分支名=%g_target% & ECHO.
FOR /f "delims=" %%a IN ('git config remote.origin.url') DO @set theValue=%%a
SET t=%theValue%
:loop4
FOR /f "tokens=1* delims=/" %%a IN ("%t%") DO (
 SET g_pref=%%a
 @REM 将截取剩下的部分赋给t,其实这里可以使用延迟变量开关
 SET t=%%b
)
IF DEFINED t GOTO :loop4
@REM 如果后四位为 .git 则去掉后四位
SET "g_pref=%g_pref:.git=%"
ECHO git项目名=%g_pref% & ECHO.
ECHO -------------输出结果-------------
git diff %g_src% %g_target% --shortstat
git diff %g_src% %g_target% --line-prefix=%g_pref%/ --name-only | clip
ECHO -------------文本已复制到剪切板,程序 3 秒后将自动退出-------------
ping 127.0.0.1 -n 3 >NUL 2>NUL
exit




目录
相关文章
|
1月前
|
数据可视化 开发工具 C#
.NET开源、免费、跨平台的Git可视化管理工具
俗话说得好“工欲善其事,必先利其器”,合理的选择和使用可视化的管理工具可以降低技术入门和使用的门槛。今天大姚给大家分享一款.NET Avalonia开源、免费、跨平台、快速的Git可视化管理工具:SourceGit。
|
21天前
|
程序员 Linux 开发工具
振南技术干货集:研发版本乱到“妈不认”? Git!(5)
振南技术干货集:研发版本乱到“妈不认”? Git!(5)
|
21天前
|
存储 安全 Linux
振南技术干货集:研发版本乱到“妈不认”? Git!(4)
振南技术干货集:研发版本乱到“妈不认”? Git!(4)
振南技术干货集:研发版本乱到“妈不认”? Git!(4)
|
3天前
|
Shell 开发工具 git
git获取gitee老版本的分支内容
git获取gitee老版本的分支内容
|
7天前
|
数据可视化 小程序 Linux
【Linux】自动化构建工具make/Makefile和git介绍
【Linux】自动化构建工具make/Makefile和git介绍
13 0
|
13天前
|
前端开发 持续交付 开发工具
【专栏:工具与技巧篇】版本控制与Git在前端开发中的应用
【4月更文挑战第30天】Git是前端开发中的必备工具,它通过分布式版本控制管理代码历史,支持分支、合并、回滚等操作,促进团队协作和冲突解决。在前端项目中,Git用于代码追踪、代码审查、持续集成与部署,提升效率和质量。优化协作包括制定分支策略、编写清晰提交信息、定期合并清理分支及使用Git钩子和自动化工具。掌握Git能有效提升开发效率和代码质量。
|
13天前
|
开发工具 git
IDEA通过git怎么回滚到某个提交节点或某个版本
IDEA通过git怎么回滚到某个提交节点或某个版本
|
18天前
|
开发工具 git
【git】如何切换到之前的提交版本
【git】如何切换到之前的提交版本
35 1
|
21天前
|
Shell Linux 开发工具
振南技术干货集:研发版本乱到“妈不认”? Git!(2)
振南技术干货集:研发版本乱到“妈不认”? Git!(2)
|
22天前
|
算法 Java BI
云效产品使用报错问题之平台上导出的统计数据和 git 中使用命令导出的数据统计都对不上,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。