`git difftool` отказывается работать под нижней оболочкой Emacs - PullRequest
4 голосов
/ 11 июля 2011

Когда я печатаю git difftool под обычной оболочкой Cygwin, я просто получаю доброкачественный выход:

~/sb/ws> git difftool
~/sb/ws>

Но когда я печатаю точно так же в нижней оболочке Emacs (при запускетот же Cygwin Bash), я получаю следующую ошибку:

~/sb/ws> git difftool
git difftool
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LC_ALL = (unset),
    LANG = "ENU"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
~/sb/ws> 

Есть идеи, почему это происходит и как это исправить?

(кстати, все остальные команды git работают отличнов этой подчиненной оболочке Emacs, поэтому я могу только предположить, что это должно быть что-то конкретное для difftool)

EDIT (предоставление информации о варианте и версии используемых инструментов):

  1. cygwin-1.7.8-1
  2. GNU Emacs 23.2.1 (i386-mingw-nt6.1.7600) от 2010-05-08 на G41R2F1
  3. git версии 1.7.4
  4. Windows 7 Ultimate, 64-разрядная

Ответы [ 2 ]

1 голос
/ 11 июля 2011

у вас действительно неправильный LANG, посмотрите на / usr / share / locale список доступных локалей ..

Но на самом деле вопрос в том, почему вы используете git напрямую в Emacs, если в немхорошие git-режимы и magit - лучшее между ними?Почему бы не выполнить все задачи с использованием Emacs?

PS У меня есть статья о Emacs + Git ...

0 голосов
/ 02 февраля 2017

Обновление через 6 лет (2017)

кстати, все остальные команды git отлично работают в этой подчиненной оболочке Emacs, поэтому я могу только предположить, что это должно быть что-то специфическое для difftool

Что характерно для difftool, так это то, что он все еще (но не долго) написан на perl: git-difftool.perl

Но это скоро изменится с Git 2.12 (1 квартал 2017 года).
Это означает, что difftool должен нормально работать под Emacs, больше не заботясь о Perl.

См. коммит 03831ef и коммит 019678d (19 января 2017) Йоханнес Шинделин (dscho) .

difftool: реализовать функциональность во встроенном

Мотивация для преобразования difftool заключается в том, что сценарии Perl совсем не являются родными для Windows, и поэтому git difftool довольно медленно запускается. ту платформу, когда нет веских причин, чтобы она была медленной.

Кроме того, Perl на самом деле не имеет доступа к внутренностям Git.
Это означает, что любой скрипт всегда должен будет перепрыгивать ненужные обручи, и ему часто придется выполнять ненужную работу (например, когда чтение всей конфигурации каждый раз, когда git config вызывается для запроса одно значение конфигурации).

Текущая версия встроенного difftool, однако, не делает полную использование внутренних органов, но вместо этого выбирает порождать пару Git процессы, тем не менее, чтобы сделать для более легкого преобразования. Там остается много комнаты для улучшения, оставленные позже.

Примечание: чтобы не рисковать, оригинальный difftool по-прежнему вызывается, если настройка конфигурации difftool.useBuiltin установлена ​​на true.

Причина: новый, экспериментальный, встроенный difftool был поставлен как часть Git для Windows v2.11.0, чтобы облегчить крупномасштабное тестирование, но конечно, как дополнительная функция.

Ускорение на самом деле более заметно в Linux, чем в Windows: быстрое тест показывает, что t7800-difftool.sh работает /

  • in (2,183 с / 0,052 с / 0,108 с) (реальный / пользователь / sys) в виртуальной машине Linux, по сравнению с (6,529 с / 3,112 с / 0,644 с), тогда как
  • в Windows это (36,064 с / 2,730 с / 7,194 с), вместо (47,637 с / 2,407 с / 6,863 с).

Виновником, скорее всего, являются накладные расходы, понесенные из-за все еще необходимости выложить на mergetool-lib.sh и difftool--helper.sh.

Тем не менее, это улучшение.

...