Git diff Word 文档

前言

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

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

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

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

docx2txt

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

安装 docx2txt

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

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

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

使用 docx2txt 命令行工具

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

配置全局可执行环境

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

shell 复制代码
#!/bin/bash 
docx2txt.pl "$1" -

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

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

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

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

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

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

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

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

配置 Git

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

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

shell 复制代码
.docx diff=word

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

shell 复制代码
git config diff.word.textconv docx2txt

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

测试

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

结语

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

相关推荐
EleganceJiaBao1 小时前
【Git】5 个分区的切换方式及示例
git·github·add
漂洋过海cv2 小时前
Word 插入无页眉页码的空白页(即插入奇数页)
word
response_L2 小时前
国产系统统信uos和麒麟v10在线打开word给表格赋值
java·c#·word·信创·在线编辑
ZhangChuChu_924812 小时前
Word在生成PDF后,PDF左侧导航书签目录错误显示的解决方法
pdf·word
LCY13314 小时前
spring 中的DAO是什么
运维·git·jenkins
柚几哥哥17 小时前
IntelliJ IDEA全栈Git指南:从零构建到高效协作开发
java·git·intellij-idea
遇到困难睡大觉哈哈17 小时前
Git推送错误解决方案:`rejected -> master (fetch first)`
大数据·git·elasticsearch
ON.LIN17 小时前
Git提交本地项目到Github
git·github
九月镇灵将18 小时前
6.git项目实现变更拉取与上传
git·python·scrapy·scrapyd·gitpython·gerapy
wuyijysx18 小时前
ubuntu git cola gui
git·软件工具