在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 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.
...文件中的所有字符都是mumbo jumbo。
出了什么问题?我该如何解决这个问题?
PS:
我不知道这是否重要,但我想我还没有配置“差异工具”,因为每次我命令:
$ 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 Word文档,并进一步here。
我玩.kdiff3rc配置...我添加的选项似乎没有让不可读的字符可读。 我将比较工具改为vimdiff;当我在微软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>
我在此问题上发布了一个新问题here。
答案 0 :(得分:2)
除了.gitattribute
之外,您还需要配置 odf
的含义:
git config diff.odf.textconv odt2txt
您需要$PATH (Linux/Mac)
或%PATH%
(Windows)中的odt2txt
(从OpenDocument文本到纯文本的简单转换)。
无需配置difftool
,因为默认情况下kdiff3
就足够了
但是kdiff3
需要打开一个文本文件,因此需要odt2txt
(为了首先将文档转换为文本文件)
有关textconv
的详情,请参阅&#34; Performing text diffs of binary files&#34;:
有时需要查看某些二进制文件的文本转换版本的差异。例如,可以将文字处理器文档转换为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不同,而不是文本区分的确切方式。
不知道为什么它不起作用。
答案 1 :(得分:0)
我猜你的情况是 kdiff3
某些输入字符无法转换为有效的unicode。您 可能使用了错误的编解码器。 (例如UTF-8用于非UTF-8文件)....
抱怨,因为它无法找到特定字体的某个字符的字形,即它无法绘制它们(它们)。
kdiff3 有很多可以在〜/ .kdiff3rc配置文件中设置的配置选项(例如here)。我会玩一些与编码和字体有关的内容。例如,从更改字体开始,例如
Font=Arial
顺便说一下,当你用你的编辑器打开这些odt文件时 - 它对你来说是可读的吗?
PS 选项也可以在命令行中传递给kdiff3: kdiff3 --cs&#34; Option1 = Val1&#34; --cs&#34; Option2 = Val2&#34; --cs ...