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