前言
前段时间用 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
等等二进制文件只要找到相应的解析器,也可以进行比对处理。