Git 您的 MS Office 文档

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

我喜欢 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

相关文章