git diff不能使用Word文档, - intnt-to-add和pandoc diff driver

时间:2018-06-16 20:27:51

标签: 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
    
  3. 这似乎工作正常,除非在指示将其添加到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
      
    5. 在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一起使用?

1 个答案:

答案 0 :(得分:2)

这最终是由于以下事实: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时出错。