美文网首页
自研导出 git 版本差异到剪贴板工具

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

作者: acc8226 | 来源:发表于2022-02-16 20:26 被阅读0次

由于规定每次发布版本需要记录文件变动差异,写了个批处理脚本。自学了一会儿 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

相关文章

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

    由于规定每次发布版本需要记录文件变动差异,写了个批处理脚本。自学了一会儿 Windows 批处理教程,欢迎浏览和发...

  • Deepin 使用

    基础工具 以下是常用的一些工具 git 用来管理源代码的版本及分支xclip 用来操作剪贴板htop top加强管...

  • HTML TABLE拷贝到剪贴板,导出到EXCEL

    1 拷贝到剪贴板 2导出到EXCEL,IE不支持 3拷贝到剪贴板和导出到EXCEL二合一

  • 基于vue的记事本应用 vuememo - 更新

    新版本更新支持 Markdown 形式的笔记,支持导出 .png 格式的笔记图片,复制内容到剪贴板方便分享,支持将...

  • GIT导出差异版本更新的文件列表

    git如何导出差异化版本文件列表查找了一番,发现git diff这个命令 刚好能列出我们想要的文件目录再使用lin...

  • Git——基础

    Git基础 1.直接记录快照,而非差异比较 Git和其它版本控制系统(包括Subversion和近似工具)的主要差...

  • RedisDump/Load的使用

    配置yum仓库 安装其他工具 查看版本 工具安装 导出命令 默认导出所有database 导出指定database...

  • Git 导出某两次提交之间的差异文件

    查看差异文件 要导出Git仓库中某两次提交之间的文件差异,必须要先知道有哪些文件发生了差异。git diff指令能...

  • 第3/4/5节 《git/tortoisegit/ide git

    简介 这几节讲如何使用git工具做源代码版本管理,涉及到git,tortoise git和egit插件三个工具。工...

  • 【git】git的特点

    参考文章 直接记录快照,而非差异比较 Git和其它版本控制系统(包括 Subversion 和近似工具)的主要差别...

网友评论

      本文标题:自研导出 git 版本差异到剪贴板工具

      本文链接:https://www.haomeiwen.com/subject/vmuqlrtx.html