Git 您的 MS Office 文档

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

我喜欢 Git 来 理解 MS Office 文档,但事实并非如此。它今天在工作中再次出现,并且巧合地在 Disqus 评论中对我的一个较旧的博客条目 -- 版本控制的兴起

无论如何,我想知道 Git 会做什么,如果它被重新设计为静默解压缩(用于提交)和重新压缩(因为它制作工作副本)。这是一个 repo – git-word-diff-test 。这是一个 Word 文档 (Mac Office) 的模拟存储的提交 – Mary.docx – 每行只包含一个单词“Mary had a little lamb”,以及一个将其更改为“Karl had a little iPad.”的提交。 ”

事实证明提交非常嘈杂 ——在页面中搜索“iPad”。这是唯一的预期变化。很遗憾一大堆随机的和暂时的东西同时发生变化。微软:请尝试做 幂等的 东西。

没关系,当 .docx 文件的大小通常为 23Kb 时,第二次提交只是对 .git/ blob 添加了 170 字节。

HEAD 提交的字节差异计算:


 COMMITSHA=$(git log | grep "commit " | head -n 1 | sed 's/commit //')
CURRENTSIZE=$(git ls-tree -lrt $COMMITSHA | grep blob | sed -E "s/.{53} *([0-9]*).*/\1/g" | paste -sd+ - | bc)
PREVSIZE=$(git ls-tree -lrt $COMMITSHA^ | grep blob | sed -E "s/.{53} *([0-9]*).*/\1/g" | paste -sd+ - | bc)
echo "$CURRENTSIZE - $PREVSIZE" | bc

从计算器修改

正如我在 Disqus 评论中所说的那样,我愿意为 Git 支付费用以静默解压缩 .docx、.xlsx 和 .pptx 文档,并且只在我结账时在工作副本中重新构建它们。我只对回车符分隔的文本差异(包括 XML)感兴趣,如果我根本没有差异的话。 zip 的二进制方面的差异是错误的,因为操作系统不是 Unix 派生的 ,不管 Cosmin 怎么说

更新:(Spet 1st)在 zip 内,有用于具有 VBA 的 Word/Excel/Ppowerpoint 文档的 vbaProject.bin。这提高了这个想法的门槛——因为它是二元的。幸运的是,有开源技术诀窍可以让这个不那么开放标准的作品也被解压:Philippe Lagadec 的 oletools