可以在互联网上找到的几个教程([1]、[2]、[3])建议使用以下配置来区分 git
跟踪的 Word 文档。
使用以下设置配置“pandoc”差异驱动程序:
[diff "pandoc"] textconv=pandoc --to=markdown prompt = false
将以下内容添加到您的
.gitattributes
文件中:*.docx diff=pandoc
这似乎工作正常,除非在指示将其添加到 git 存储库的意图后尝试比较未跟踪的 Word 文档。有谁知道为什么这在这种情况下不起作用?
这里是重现的步骤,假设上面详述了以下配置。
在 git 存储库中创建一个 Word 文档
touch my_document.docx
在 Microsoft Word 中打开文件,在 Word 文档中添加一些内容(例如,字符“asdf”),然后保存
表明您添加文档的意图
git add -N my_document.docx
尝试查看差异:
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/