可以在互联网上找到的几个教程([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
一起使用?
答案 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时出错。