在git中,我试图使用.gitattributes来比较.odt文件、libreoffice writer文件和difftool。
根据本指南:http://www-verimag.imag.fr/~moy/opendocument/我制作了一个.gitattributesfile.gittattributes:

*.ods diff=odf
*.odt diff=odf
*.odp diff=odf

*.ods difftool=odf
*.odt difftool=odf
*.odp difftool=odf

这使得git diff比较.odt中的文本,但是当git difftool启动kdiff3来比较.odt文件时,我得到了一个弹出错误:
Some input characters could not be converted to valid unicode.
You might be using the wrong codec. (e.g. UTF-8 for non UTF-8 files).
Don't save the result if unsure. Continue at your own risk.
Affected input files are in A, B.

…文件中的所有字符都是模糊不清的。
出什么事了?我该怎么解决?
附言:
我不知道这是否重要,但我想我没有配置“diff.tool”,因为每次我命令:
$ git difftool

我得到这个输出:
This message is displayed because 'diff.tool' is not configured.
See 'git difftool --tool-help' or 'git help config' for more details.
'git difftool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld kompare gvimdiff diffuse diffmerge ecmerge p4merge araxis bc codecompare emerge vimdiff

Viewing (1/1): 'diffexperiment.odt'
Launch 'kdiff3' [Y/n]:

这可能就是为什么kdiff3看起来不适用于odt2txt吗?
编辑:我试着用微软的word文档来做这件事,并得到了进一步的here
我玩过.kdiff3rc配置…我添加的选项似乎都无法使无法读取的字符可读。
我将比较工具更改为vimdiff;当我对microsoft word文档执行git difftool时,vimdiff显示了以.xml结尾的文件列表,而不是不可读的字符。
当我对其中一个文件按下回车键时,显示:
<?xml version="1.0" encoding="UTF-8"?>
  " Browsing zipfile /tmp/4LMJbj_HI I am writing something here..docx                          |<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Override PartName
  " Select a file with cursor and press ENTER                                                  |="/_rels/.rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Overr
                                                                                               |ide PartName="/word/settings.xml" ContentType="application/vnd.openxmlformats-officedocument.w
  _rels/.rels                                                                                  |ordprocessingml.settings+xml"/><Override PartName="/word/_rels/document.xml.rels" ContentType=
  word/settings.xml                                                                            |"application/vnd.openxmlformats-package.relationships+xml"/><Override PartName="/word/fontTabl
  word/_rels/document.xml.rels                                                                 |e.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+x
  word/fontTable.xml                                                                           |ml"/><Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officed
  word/numbering.xml                                                                           |ocument.wordprocessingml.styles+xml"/><Override PartName="/word/document.xml" ContentType="app
  word/styles.xml                                                                              |lication/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/><Override Part
  word/document.xml                                                                            |Name="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-p
  docProps/app.xml                                                                             |roperties+xml"/><Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlfo
  docProps/core.xml                                                                            |rmats-package.core-properties+xml"/>
  [Content_Types].xml                                                                          |</Types>

我在这个问题上发表了一个新问题。

最佳答案

除了.gitattribute之外,您还需要配置odf的含义:

git config diff.odf.textconv odt2txt

您需要在odt2txt$PATH (Linux/Mac)(windows)中使用%PATH%(从opendocument文本到纯文本的简单转换程序)。
不需要配置difftool,因为默认情况下kdiff3就足够了。
但是kdiff3需要打开一个文本文件,因此需要odt2txt(以便首先将文档转换为文本文件)
有关textconv的更多信息,请参见“Performing text diffs of binary files”:
有时需要查看一些二进制文件的文本转换版本的差异。例如,字处理器文档可以转换为ascii文本表示,并显示文本的差异。
即使此转换会丢失一些信息,但生成的diff对于人工查看非常有用(但不能直接应用)。
配置选项用于定义执行这种转换的程序。程序应该接受一个参数,即要转换的文件名,并在stdout上生成结果文本。
注意
文本转换通常是单向转换;这意味着由textconv生成的差异不适合应用。
因此,只有textconvgit diff系列命令(即git loglogwhatchanged)才能执行文本转换。
show永远不会生成此输出。
如果你想给某人发送一个二进制文件的文本转换diff(例如,因为它能快速传达你所做的更改),你应该单独生成它,并将它作为注释发送,除了你可能发送的通常的二进制diff之外。
OP Jack提到:
在Linux上,我在主目录中运行:
$ git config diff.odf.textconv odt2txt

我已经安装了…我假设git format-patchodt2txt中,因为当我运行odt2txt时,我得到了关于$PATH的信息。
然而,这些东西似乎都不是出于某种原因生成$ odt2txt文件的。
当我odt2txt时,我仍然得到二进制文件fileone.odt和filetwo.odt的输出,而不是文本的区别。
不知道为什么没用。

09-04 05:11
查看更多