git - git diff 不适用于 Word 文档、--intent-to-add 和 pandoc diff 驱动程序
问题描述
可以在 Internet 上找到的几个教程([1]、[2]、[3])建议使用以下配置来区分git
.
使用以下设置配置“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 时会出错。
推荐阅读
- ruby-on-rails - 如何在 Rails 中使用 LIKE 进行搜索
- ios - 如何在 NavigationController 和 UITabbar 上方显示 UIView?
- python - python多线程与队列按顺序运行而不是并行
- html - CSS中的元素圆心
- r - R - 测试一对向量是否不相交的有效方法
- java - LibGDX:在移动/动画时跟踪节点
- python - 如何将 cmd-line 参数传递给 test_file (pytest) 中的方法?
- r - 使用列表对大型数据框进行子集化
- php - 如何使用html和php表单在sql表中添加多个数据
- asynchronous - @Async 注解正在创建线程,但只有一个线程正在承担所有负载