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?
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.
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:
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.
AGORA VOCÊ DEVE REINICIAR SEU SHELL (CMD.EXE). Basta executar um novo. E a partir daí, você não deve ter mais problemas. Novamente:
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).
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:
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.
Respostas:
Para Git Bash, isso pode ser corrigido adicionando a seguinte linha a ~ / .bashrc:
-ou-
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
TERM
variáveis de ambiente do sistema.http://code.google.com/p/msysgit/issues/detail?id=184
fonte
setx TERM msys
.SETX
(ao contrário de apenas SET) grava a variável env no registro.Se você estiver tendo problemas com cmd.exe, por exemplo, consulte o aviso aqui:
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.
AGORA VOCÊ DEVE REINICIAR SEU SHELL (CMD.EXE). Basta executar um novo. E a partir daí, você não deve ter mais problemas. Novamente:
fonte
As respostas acima não funcionaram totalmente para mim, então eu fiz: Adicionar
para " [githome] / etc / profile " na parte superior, mas fez alterações apenas para git bash. Então eu adicionei
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).
fonte
A resposta pode ser encontrada aqui , em que o autor da solução afirma que:
isso foi em vez de
Você pode mudar isso para
para resolver o problema em questão.
fonte
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:
O que resolveu o problema para mim.
fonte
Uma solução rápida e suja no meu caso acabou sendo usar a
--no-pager
opção.Por padrão, alguns comandos git (como
log
) usarão um pager comoless
se 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:
fonte
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 paraC:\cygwin
. Mudar paraC:\Program Files (x86)\Git\bin\
consertar para mim. Não precisei definir a variável TERM para iniciar o bash dessa forma.fonte