Por que o git diff no Windows avisa que o “terminal não está totalmente funcional”?

111

Estou usando o msysgit 1.7.7.1 no Windows. Recebo um erro ao usar git diff. O quê está causando isto? Não há ferramenta diff incluída no msysgit? O que devo fazer?

AVISO: o terminal não está totalmente funcional

Portaljacker
fonte
1
Uma solução provável: kizzx2.com/blog/index.php/2009/01/07/…
Mr_Spock
Ok, bem, msysgit usa git, é meio que no nome. Então eu segui com msys como o termo e funcionou! Poste a explicação em uma resposta bem formatada para que eu possa premiar você!
Portaljacker
no PowerShell executado: $ env: Term = "xterm"
Anton Soradoi

Respostas:

62

Para Git Bash, isso pode ser corrigido adicionando a seguinte linha a ~ / .bashrc:

export TERM=cygwin

-ou-

export TERM=msys

O primeiro parece ser o original do git para windows, o segundo também é uma forma conhecida de "curar".

O problema pode ser causado se algum outro programa (como por exemplo Strawberry Perl ) definir as TERMvariáveis ​​de ambiente do sistema.

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

manojlds
fonte
Sim, mas esse arquivo não existe na árvore de arquivos do git. A outra resposta funcionou e fez sentido.
Portaljacker
1
@Portaljacker - O que você quer dizer com funcionou? Feche o git bash, abra novamente e veja se ainda funciona?
manojlds
4
Sim, no Windows, definir a variável de ambiente via set ou GUI (configurações avançadas como mostrado na outra resposta) é o caminho a percorrer.
cgp
11
Essa resposta é insatisfatória porque o OP não disse que estava usando o bash e não há nenhum requisito de que o git seja executado a partir do bash. Pessoalmente, eu uso o Prompt de Comando do Windows e quero uma solução que funcione para esse ambiente.
David Grayson
7
@DavidGrayson Thread necro, eu sei, mas você pode fazer o mesmo no prompt de comando do Windows usando setx TERM msys. SETX(ao contrário de apenas SET) grava a variável env no registro.
rossipedia
184

Se você estiver tendo problemas com cmd.exe, por exemplo, consulte o aviso aqui:

CMD.EXE sem o TERM definido corretamente

Em seguida, basta definir as variáveis ​​de ambiente e incluir TERM = msys. Depois disso, cada vez que você abrir um cmd.exe, sua variável será configurada corretamente.

Como definir sua variável de ambiente TERM

AGORA VOCÊ DEVE REINICIAR SEU SHELL (CMD.EXE). Basta executar um novo. E a partir daí, você não deve ter mais problemas. Novamente:

CMD.EXE com o conjunto de TERM correto

bola de televisão
fonte
Sim, definitivamente é. Estou no Vista, e isso resolveu tudo. Obrigado teleball!
J Cole Morrison
2
Alguma ideia de onde vem esse problema ou o que essa mensagem significa ?
Anthony Mastrean,
7
@AnthonyMastrean significa que o terminal não suporta gravação em locais diferentes na janela do terminal. Git diff deseja escrever em toda a janela, por exemplo, para escrever a próxima tela cheia, sem fazer um milhão de retrocessos para colocar o cursor no lugar certo a cada vez.
jwg
Uma vez que os programas não são alterados, o problema real não é o suporte de terminal, é git (exatamente menos) tolice de outro programa que define a variável TERM como um termo básico, como @manojlds aponta.
Albfan
2
Se você estiver usando o Vagrant, essa correção causará problemas com o shell bash. Por exemplo, o nano não funcionará mais, apresentando o erro: 'msys': tipo de terminal desconhecido
Sirrah
16

As respostas acima não funcionaram totalmente para mim, então eu fiz: Adicionar

export TERM=msys 

para " [githome] / etc / profile " na parte superior, mas fez alterações apenas para git bash. Então eu adicionei

@set TERM=msys

para " [githome] /cmd/git.cmd " após @setlocal (instalei apenas git run da linha de comando). Pode ser que esta decisão não seja realmente boa, mas funciona para mim e não há nenhum aviso de terminal. (Eu uso git versão 1.7.10.msysgit.1).

Anatoly R
fonte
2
Para windows, eu só precisava definir a variável de ambiente TERM para msys, o que pode ser feito via SETX.
cgp
14

A resposta pode ser encontrada aqui , em que o autor da solução afirma que:

a variável de ambiente TERMfoi definida paradumb

isso foi em vez de

TERM=cygwin

Você pode mudar isso para

TERM=msys

para resolver o problema em questão.

Mr_Spock
fonte
Acontece que esta resposta só funciona para a sessão atual do gitbash, tive que alterá-la para a outra resposta.
Portaljacker 01 de
6

Eu trabalho no PowerShell e tenho o executável git diretamente no meu caminho.

Nenhuma das respostas sugeridas funcionou, mas encontrei uma solução que funciona para mim.

Eu adicionei uma linha em meu perfil do PowerShell:

$env:TERM="msys"

O que resolveu o problema para mim.

John Weldon
fonte
Isso não parece mais ser um problema para mim usando git versão 1.7.11.msysgit.1 Consegui remover $ env: TERM = "msys" e reativar a extensão de cor no mercurial sem problemas.
John Weldon
O conflito com outros aplicativos que usam terminais diferentes é a razão pela qual você deve seguir a resposta do manojlds e definir TERM no próprio .bashrc do Git Bash em vez de alterar a variável de ambiente aqui, o que afetará todos os programas.
jwg
1
@jwg bom argumento, mas eu uso git o tempo todo e prefiro o powershell ao bash, então ter que executar o bash apenas para obter a saída de cores foi um exagero para mim.
John Weldon
Eu adicionei isso ao meu arquivo cmder profile..ps1 em vez do meu perfil geral do PowerShell.
gerrard00
6

Uma solução rápida e suja no meu caso acabou sendo usar a --no-pageropção.

Por padrão, alguns comandos git (como log) usarão um pager como lessse esperassem que a saída fosse longa. Os pagers exigem coisas como rolar o texto para cima e para baixo com as teclas de seta, o que às vezes não funciona se as suposições sobre o tipo de terminal que você está usando estiverem erradas (isso é o que significa "não totalmente funcional").

Se você sabe com antecedência que sua saída será curta, ou apenas deseja que ela despeje a saída no terminal e deixe a rolagem para o programa do terminal, você pode ignorar isso e não usar um pager, por exemplo:

git --no-pager log
Felix
fonte
0

No caso de alguém obter este bash de inicialização de extensões Git, verifique a configuração para Path to linux tools.... O meu foi definido para C:\cygwin. Mudar para C:\Program Files (x86)\Git\bin\consertar para mim. Não precisei definir a variável TERM para iniciar o bash dessa forma.

Argila
fonte