В git, как различить документы Microsoft Word?

Я следовал этому руководству здесь о том, как различать документы Microsoft Word, но я столкнулся с этой ошибкой:

Usage:  /usr/bin/docx2txt.pl [infile.docx|-|-h] [outfile.txt|-]
        /usr/bin/docx2txt.pl < infile.docx
        /usr/bin/docx2txt.pl < infile.docx > outfile.txt

        In second usage, output is dumped on STDOUT.

        Use '-h' as the first argument to get this usage information.

        Use '-' as the infile name to read the docx file from STDIN.

        Use '-' as the outfile name to dump the text on STDOUT.
        Output is saved in infile.txt if second argument is omitted.

Note:   infile.docx can also be a directory name holding the unzipped content
        of concerned .docx file.

fatal: unable to read files to diff

Чтобы объяснить, как я пришел к этой ошибке: я создал.gitattributes в репозитории, из которого я хочу получить разницу..gitattributes выглядит так:

*.docx diff=word
*.docx difftool=word

Я установил docx2txt. Я на Linux. Я создал файл с именем docx2txt, который содержит это:

#!/bin/bash
docx2txt.pl $1 -

я $ chmod a+x docx2txt и я поместил docx2txt в / usr / bin /

Я сделал:

$ git config diff.word.textconv docx2txt

затем попытался различить два документа Microsoft Word. Вот когда я получил ошибку, которую я упомянул выше.

Что мне не хватает? Как мне решить эту ошибку?

PS: я не знаю, может ли моя оболочка найти docx2txt, потому что, когда я делаю это:

$ docx2txt

мой терминал зависает, что-то обрабатывает, но ничего не выводит, и когда я делаю эти команды, это происходит:

$ man docx2txt
No manual entry for docx2txt
$ docx2txt --help
Can't read docx file <--help>!

ОБНОВЛЕНИЕ в процессе выполнения: я изменил docx2txt на

#!/bin/bash
docx2txt.pl "$1" -

как предложил pmod, а теперь git diff <commit> работает из командной строки! Ура! Тем не менее, когда я пытаюсь

$ git difftool <commit>

git запускает kdiff3, и я получаю эту ошибку:

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, но kdiff3 по какой-то причине не отображает текст из diff правильно.

Как правильно отобразить текст для diff в kdiff3 или другом графическом инструменте? Стоит ли менять kdiff3 на другой инструмент?

Дополнительно: моя оболочка не может найти docx2txt из-за этих команд:

$ which doctxt
which: no doctxt in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)

$ which docx2txt
/usr/bin/docx2txt

2 ответа

Решение

doc2txt.pl ожидает ровно два аргумента или ноль в зависимости от использования. В первом (вашем) случае аргументы либо имена файлов, либо "-". Итак, ваш скрипт-обертка выглядит корректно, за исключением случая, когда в имени файла передается хотя бы один пробел в качестве первого аргумента. В этом случае после расширения $1 части имени файла будут передаваться как отдельные аргументы, таким образом, инструмент выводит информацию об использовании, поскольку он читает более 2 аргументов.

Попробуйте использовать кавычки, чтобы избежать разбиения имени файла:

#!/bin/bash
docx2txt.pl "$1" -

PS: я не знаю, может ли моя оболочка найти docx2txt

Вы можете проверить это с

$ which docx2txt

Если вы видите путь, то можно найти инструмент (двоичный или исполняемый скрипт) (на основе переменной среды PATH).

потому что, когда я делаю это:

$ docx2txt

мой терминал зависает, что-то обрабатывает, но ничего не выводит

Без аргументов ваш скрипт будет выполнять doc2txt.pl - который в соответствии с использованием инструмента ожидает входной файл, переданный через STDIN, то есть то, что вы печатаете. Таким образом, это похоже на зависание и обработку чего-либо, но на самом деле только захватывает ваш ввод.

Вы можете использовать pandoc для конвертации в уценку

pandoc -f docx -t markdown -o outfile.md infile.docx

а затем использовать Meld, который является отличным графическим интерфейсом, чтобы сравнить документы

https://askubuntu.com/questions/515900/how-to-compare-two-files

Другие вопросы по тегам