在git中,我试图使用.gitattributes将.odt文件、libreofice编写器文件与difftool进行比较。通过遵循本指南:http://www-verimag.imag.fr/~moy/opendocument/,我创建了一个.gitattributes文件.gitattributes,如下所示:
*.ods diff=odf
*.odt diff=odf
*.odp diff=odf
*.ods difftool=odf
*.odt difftool=odf
*.odp difftool=odf这使得git比较了.odt中的文本,然而,当git扩散工具启动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....and文件中的所有字符都是笨手笨脚的。
哪里出了问题?我该怎么解决这个问题?
PS:
我不知道这是否重要,但我想我还没有配置“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合作的原因吗?
编辑:我重新尝试使用Microsoft文档来完成这个任务,并获得了更多的这里。
我玩过.kdiff3rc配置..。我添加的所有选项似乎都无法使不可读字符可读性更好。我将比较工具更改为vimdiff;当我在microsoft文档上使用git散乱工具时,vimdiff显示了以.xml结尾的文件列表,而不是不可读字符。
当我按下enter键进入其中一个显示的文件时:
<?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>我发布了一个关于这个问题的新问题,这里。
发布于 2015-10-31 05:24:01
除了.gitattribute之外,您还需要配置odf的含义:
git config diff.odf.textconv odt2txt您还需要odt2txt (从OpenDocument文本到纯文本的简单转换)在$PATH (Linux/Mac)或%PATH% (Windows)中。
不需要配置difftool,因为默认情况下kdiff3就足够了。
但是kdiff3需要打开一个文本文件,因此需要odt2txt (为了首先将文档转换为文本文件)。
有关textconv的更多信息,请参见"执行二进制文件的文本差异":
有时,希望看到一些二进制文件的文本转换版本的差异。例如,字处理器文档可以转换为ASCII文本表示,并显示文本的差异。 即使这种转换丢失了一些信息,结果的差异对于人类查看还是有用的(但不能直接应用)。
textconv配置选项用于定义用于执行此类转换的程序。程序应该使用一个参数,即要转换的文件名,并在stdout上生成结果文本。 备注 文本转换通常是单向转换,这意味着textconv生成的差异不适合应用。 因此,只有git diff和git log系列命令(即log、whatchanged、show)将执行文本转换。git format-patch将永远不会生成此输出。 如果您想向某人发送一个二进制文件的文本转换的差异(例如,因为它快速地传递了您所做的更改),那么除了可能发送的二进制差异之外,您还应该单独生成它,并将其作为注释发送。
在Linux上,我运行在我的主目录中:
$ git config diff.odf.textconv odt2txt我安装了
odt2txt..。我假设odt2txt在$PATH中,因为当我运行$ odt2txt时,我会得到关于odt2txt的信息。 然而,由于某种原因,所有这些东西似乎都不能使git diff .odt文件。 当我$ git diff fileone.odt filetwo.odt时,我仍然得到二进制文件fileone.odt和filetwo.odt的输出不同,而不是文本的区别。 不知道为什么不行。
发布于 2015-12-02 22:08:23
我猜kdiff3在你的案子里
一些输入字符无法转换为有效的unicode。你可能用错了编解码器。(例如,非UTF-8档案的UTF-8 )。
抱怨,因为它无法为特定字体找到某个字符的字形,也就是说,它不能绘制它(它们)。
kdiff3有许多配置选项,可以在~/.kdiff3rc配置文件中设置(例如这里)。我会玩一些与编码和字体有关的游戏。例如,从更改字体开始。
Font=Arial顺便说一句,当你用编辑器打开这些odt文件时--哪种字体是可读的?
PS选项也可以在命令行中传递给kdiff3 : kdiff3 -cs "Option1=Val1“-cs "Option2=Val2”--cs .
https://stackoverflow.com/questions/33448260
复制相似问题