在git中,我试图使用.gitattributes
来比较.odt文件、libreoffice writer文件和difftool。
根据本指南:http://www-verimag.imag.fr/~moy/opendocument/我制作了一个.gitattributes
file.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
生成的差异不适合应用。因此,只有
textconv
和git diff
系列命令(即git log
,log
,whatchanged
)才能执行文本转换。show
永远不会生成此输出。如果你想给某人发送一个二进制文件的文本转换diff(例如,因为它能快速传达你所做的更改),你应该单独生成它,并将它作为注释发送,除了你可能发送的通常的二进制diff之外。
OP Jack提到:
在Linux上,我在主目录中运行:
$ git config diff.odf.textconv odt2txt
我已经安装了…我假设
git format-patch
在odt2txt
中,因为当我运行odt2txt
时,我得到了关于$PATH
的信息。然而,这些东西似乎都不是出于某种原因生成
$ odt2txt
文件的。当我
odt2txt
时,我仍然得到二进制文件fileone.odt和filetwo.odt的输出,而不是文本的区别。不知道为什么没用。