Git diff Word 文档

前言

前段时间用 nodeJS 写了一个提交代码的工具,开发过程中在认证部分遇到了一些小问题,于是就想看看官方的文档中有没有什么说明之类的,没想到文档中的内容十分丰富,除了解释了 git 相关的原理外,还学到了很多有用的东西,比如本文内容:通过 git diff word 文档。

在看文档前,我还从未想过 word 这类的二进制文件也是有办法通过 git 进行 diff 的,在之前一直认为是无解的问题。

git 本身在比较 word 文档一类的二进制文件时只会显示类似下面这样的结果:

Pasted image 20231107211118.png

git 比较二进制文件,说起来也简单,虽然 git 本身没有办法进行比较,但是你可以告诉 git 如何将二进制转化为文本格式,如此便能通过 git 进行比对了。

docx2txt

Docx2txt是一个基于Perl的命令行实用程序,用于将 Microsoft docx 文档转换为格式合理的文本文件,并进行适当的字符转换,我们可以通过它,使其在进行 git diff 时转换 word 文档。

安装 docx2txt

Docx2txt 下载地址:https://sourceforge.net/projects/docx2txt

安装过程并不复杂,在安装包中提供了 INSTALL 说明文件,提供了各类需求的安装说明,如果每没有特殊需求,linux/mac 用户在该目录下直接执行 make 进行安装即可

Pasted image 20231107214333.png

make 命令会默认安装到 /usr/local/bin 路径下。

Pasted image 20231107214740.png

使用 docx2txt 命令行工具

我们这里尝试使用 docx2txt 解析一下 docx 文档,通过 docx2txt.pl <word 文件名> 生成一个 同名.txt 的文件,这个文件的内容就已经是解析好的 word 文本。

Pasted image 20231107223824.png

配置全局可执行环境

首先创建一个 docx2txt 的脚本文件,将脚本的输出结果包装秤 Git 识别的格式,最简单的方式,是将这个文件直接放到可执行路径下,比如和 dox2txt.pl 相同目录下:/usr/local/bin ,然后添加以下内容。

#!/bin/bash 
docx2txt.pl "$1" -

添加完成后,使用 chomd a+x docx2txt 命令,给文件添加可执行权限。

我个人不喜欢放到 /usr/local/bin 下,一般会创建一个 shell 的目录,将这个目录挂载到环境变量中。

注:如果你没有自定义目录的需求,可以跳过下面这段

# 在根目录下创建自定义 shell 的目录
sudo mkdir /shell

# 将目录写入环境变量
sudo vim ~/.bash_profile
# 以下是写入内容
PATH="/shell:$PATH"

# 退出文件编辑后,执行 source 命令,使其生效
source ~/.bash_profile

.bash_profile 实际添加如最后一行:

Pasted image 20231107225114.png

配置完成后,将这个文件扔到 /shell 目录下即可。

配置 Git

安装好 docx2txt 后,我们接下来就需要配置 Git 了。

接下来,在需要进行转换的仓库中添加 .gitattributes 文件,并在文件中添加以下配置

.docx diff=word

配置 diff word 使用 docx2txt 进行比较,这里只针对单个仓库生效,如果想要全局生效加入 --global

git config diff.word.textconv docx2txt

仅仅需要这两步, git 就配置好了,接下来我们测试一下是否可以正常比较了。

测试

此时再执行 git diff 已经可以正常比对 word 文档了

Pasted image 20231107231245.png

结语

虽然这是一篇 git diff word 文档的文章,但究其原理终究是将二进制转换成正常的文本,所以类似的如 excel, pdf 等等二进制文件只要找到相应的解析器,也可以进行比对处理。

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值