git diff 不适用于 Word 文档、--intent-to-add 和 pandoc diff 驱动程序

标签 git diff pandoc git-diff git-add

可以在互联网上找到的几个教程([1][2][3])建议使用以下配置来区分 git 跟踪的 Word 文档。

  1. 使用以下设置配置“pandoc”差异驱动程序:

    [diff "pandoc"]
        textconv=pandoc --to=markdown
        prompt = false
    
  2. 将以下内容添加到您的 .gitattributes 文件中:

    *.docx diff=pandoc
    

这似乎工作正常,除非在指示将其添加到 git 存储库的意图后尝试比较未跟踪的 Word 文档。有谁知道为什么这在这种情况下不起作用?

这里是重现的步骤,假设上面详述了以下配置。

  1. 在 git 存储库中创建一个 Word 文档

    touch my_document.docx
    
  2. 在 Microsoft Word 中打开文件,在 Word 文档中添加一些内容(例如,字符“asdf”),然后保存

  3. 表明您添加文档的意图

    git add -N my_document.docx
    
  4. 尝试查看差异:

    git diff my_document.docx
    #> couldn't parse docx file
    #> fatal: unable to read files to diff
    

在 macOS 上使用 git 版本 2.17.1,我最终遇到了“致命:无法读取文件以进行差异化”错误。但是,只需将文件添加到索引,然后运行 ​​git diff --cached 就会产生以下差异:

diff --git a/my_document.docx b/my_document.docx
new file mode 100644
index 0000000..17f1b0d
--- /dev/null
+++ b/my_document.docx
@@ -0,0 +1 @@
+asdf

为什么 diff 驱动程序不能与 git add -N 一起工作?

最佳答案

这最终是由于 pandoc --to=markdown/dev/null/ 没有错误地返回任何内容,而 pandoc --to=markdown a/my_document. docx 错误,以防万一 a/my_document.docx 是一个空文件。

因此,如果您第一次将 my_document.docx 添加到索引,然后运行 ​​git diff --cached 将索引与 HEAD 进行比较,比较将针对 /dev/null,一切都会正常工作。

但是,如果您已表明要添加新文件 my_document.docx,请使用 git add -N,这是一个包含以下内容的空文件相同的名称将被添加到索引中。在这种情况下,pandoc 在尝试将索引中的空文件转换为 Markdown 时会出错。

关于git diff 不适用于 Word 文档、--intent-to-add 和 pandoc diff 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50891512/

相关文章:

linux - 使用 Linux 命令比较文件

python - 你如何解析用 pysvn 创建的 diff 文件?

pandoc - pandoc HTML 模板中的相对路径

markdown - 使用 Pandoc 时禁用 'TeX math'

syntax-highlighting - Pandoc:可用的语法荧光笔有哪些?

ios - 将一个项目作为子模块添加到另一个项目

git - Azure Git 身份验证失败

git - 如何在删除工作目录后删除 git 工作树分支?

git - 什么会让 git 在 git pull --rebase 期间删除本地文件?

java - 检测 HTML 页面之间的差异百分比