Почему git diff в Windows предупреждает, что «терминал не работает полностью»?


111

Я использую msysgit 1.7.7.1 в Windows. Я получаю ошибку при использовании git diff. Чем это вызвано? В msysgit нет инструмента сравнения? Что я должен делать?

ВНИМАНИЕ: терминал не работает полностью



Хорошо, msysgit использует git, это вроде как в названии. Итак, я использовал термин msys в качестве термина, и это сработало! Опубликуйте объяснение в виде хорошо отформатированного ответа, чтобы я мог наградить вас репутацией!
Portaljacker

в powershell run: $ env: Term = "xterm"
Антон Сорадой

Ответы:


62

Для Git Bash это можно исправить, добавив следующую строку в ~ / .bashrc:

export TERM=cygwin

-или-

export TERM=msys

Первый кажется оригинальным от git для Windows, второй также является популярной известной формой «исцеления».

Проблема может возникнуть, если какая-то другая программа (например, Strawberry Perl ) устанавливает TERMпеременные системного окружения.

http://code.google.com/p/msysgit/issues/detail?id=184


Да, но такого файла нет в дереве файлов для git. Другой ответ сработал и имел смысл.
Portaljacker

1
@Portaljacker - Что значит сработало? Закройте git bash, откройте снова и посмотрите, работает ли он по-прежнему?
Manojlds

4
Да, в Windows установка переменной среды с помощью набора или графического интерфейса (расширенные настройки, как показано в другом ответе) - это путь.
cgp 09

11
Этот ответ неудовлетворителен, потому что OP не сказал, что он использует bash, и нет требования, чтобы git запускался из bash. Лично я использую командную строку Windows, и мне нужно решение, которое работает в этой среде.
Дэвид Грейсон,

7
@DavidGrayson Thread necro, я знаю, но вы можете сделать то же самое в командной строке Windows, используя setx TERM msys. SETX(в отличие от просто SET) записывает переменную env в реестр.
rossipedia

184

Если у вас возникли проблемы, например, с cmd.exe, см. Предупреждение здесь:

CMD.EXE без TERM установлен правильно

Затем просто установите переменные среды и включите TERM = msys. После этого каждый раз, когда вы открываете cmd.exe, ваша переменная будет устанавливаться правильно.

Как установить переменную среды TERM

ТЕПЕРЬ ВЫ ДОЛЖНЫ ПЕРЕЗАГРУЗИТЬ СВОЮ ОБОЛОЧКУ (CMD.EXE). Просто запустите новый. И оттуда у вас больше не должно быть проблем. Очередной раз:

CMD.EXE с правильным набором TERM


Да, это определенно так. Я нахожусь в перспективе, и это полностью решило проблему. Спасибо телеболу!
J Cole Morrison,

2
Есть идеи, откуда взялась эта проблема или что означает это сообщение ?
Энтони Мастрян

7
@AnthonyMastrean означает, что терминал не поддерживает запись в разные места в окне терминала. Git diff хочет писать по всему окну, например, чтобы написать следующий экран, не делая миллион обратных пробелов, чтобы каждый раз помещать курсор в нужное место.
jwg 03

Поскольку программы не меняются, настоящая проблема заключается не в поддержке терминала, это git (ровно меньше) было глупо со стороны другой программы, которая определяет переменную TERM как некий базовый термин, как указывает @manojlds.
albfan

2
Если вы используете Vagrant, это исправление вызывает проблемы с оболочкой bash. Например, nano больше не будет работать, выдает ошибку: 'msys': неизвестный тип терминала
Сирра,

16

Вышеуказанные ответы не были полностью сработаны для меня, поэтому я сделал: Добавить

export TERM=msys 

на " [githome] / etc / profile " вверху, но он внес изменения только для git bash. Затем я добавил

@set TERM=msys

на " [githome] /cmd/git.cmd " после @setlocal (я установил только git, запускаемый из командной строки). Возможно, это решение не совсем хорошее, но у меня оно работает и предупреждений о терминалах нет. (Я использую git версии 1.7.10.msysgit.1).


2
Для окон мне просто нужно было установить для переменной среды TERM значение msys, что можно сделать с помощью SETX.
cgp 09

14

Ответ можно найти здесь , в котором автор решения утверждает, что:

переменная среды TERMбыла установлена ​​наdumb

это было вместо

TERM=cygwin

Вы можете изменить это на

TERM=msys

чтобы решить возникшую проблему.


Оказывается, этот ответ работает только для текущего сеанса gitbash, пришлось изменить его на другой ответ.
Portaljacker 01

6

Я работаю в PowerShell, и у меня есть исполняемый файл git прямо на моем пути.

Ни один из предложенных ответов не помог, но я нашел решение, которое мне подходит.

Я добавил строку в свой профиль PowerShell:

$env:TERM="msys"

Что устранило проблему для меня.


Это больше не кажется мне проблемой при использовании git версии 1.7.11.msysgit.1. Мне удалось удалить $ env: TERM = "msys" и повторно включить расширение цвета в mercurial без проблем.
Джон Велдон

Конфликт с другими приложениями, которые используют другие терминалы, является причиной, по которой вы должны следовать ответу manojlds и установить TERM в собственном .bashrc Git Bash, а не изменять здесь переменную среды, что повлияет на все программы.
jwg 03

1
@jwg - хороший аргумент, но я все время использую git и предпочитаю powershell bash, поэтому необходимость запускать bash только для получения цветного вывода была для меня излишней.
Джон Уэлдон

Я добавил это в свой файл cmder profile..ps1 вместо общего профиля PowerShell.
gerrard00 06

6

Быстрое и грязное решение в моем случае оказалось использование этой --no-pagerопции.

По умолчанию некоторые команды git (например, log) будут использовать пейджер, например, lessесли они ожидают, что вывод будет длинным. Для пейджеров требуются такие вещи, как прокрутка текста вверх и вниз с помощью клавиш со стрелками, что иногда не работает, если предположения о том, какой терминал вы используете, неверны (это то, что означает «не полностью функциональный»).

Если вы заранее знаете, что ваш вывод будет коротким, или вы просто хотите, чтобы он выводил вывод на терминал и оставил прокрутку до вашей программы терминала, вы можете переопределить это и вообще не использовать пейджер, например:

git --no-pager log

0

Если кто-то получит этот запускающий bash из Git Extensions, проверьте настройку для Path to linux tools.... Мой был установлен на C:\cygwin. Изменил его на C:\Program Files (x86)\Git\bin\исправленный для меня. Мне не нужно было устанавливать переменную TERM для запуска bash таким образом.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.