Estou executando o git-diff em um arquivo, mas a alteração está no final de uma longa fila.
Se eu usar as teclas do cursor para mover para a direita, ele perde o código de cores - e pior ainda, as linhas não se alinham - dificultando o rastreamento da alteração.
Existe uma maneira de evitar esse problema ou simplesmente fazer com que as linhas sejam quebradas?
Estou executando o Git 1.5.5 via mingw32.
git diff --color-words | fold
fold
mas remove a cor. Desde que você especifica,--color-words
eu assumo que você conseguiu passar as cores parafold
. Quão?Respostas:
A exibição da saída de
git diff
é manipulada por qualquer pager que você estiver usando.Geralmente, no Linux,
less
seria usado.Você pode dizer ao git para usar um pager diferente configurando a
GIT_PAGER
variável de ambiente. Se você não se importa com a paginação (por exemplo, seu terminal permite rolar para trás), tente explicitamente definirGIT_PAGER
como vazio para pará-lo usando um pager. No Linux:Sem um pager, as linhas serão quebradas.
Se o seu terminal não suporta saída colorida, você também pode desativar isso usando o
--no-color
argumento ou colocando uma entrada na seção de cores do seu arquivo de configuração do git.fonte
Ou, se você usar menos como pager padrão, basta digitar
-S
enquanto visualiza o diff para reativar o agrupamento em menos.fonte
--word-diff
para ver um destacando de palavras alteradas codificados por cor--word-diff
parte merece ter sua própria resposta, pois me parece muito ajudar a resolver o problema subjacente: descobrir o que mudou em uma longa linha. Então, eu fiz isso um: stackoverflow.com/a/19253759/313756-S
com S maiúsculo, não-s
. Menos exibe uma mensagem “Dobrar linhas longas (pressione RETURN)” na parte inferior após digitar-S
e, em seguida, pressionar Retornar ativa a quebra.Você também pode usar
git config
para configurar o pager para quebrar.Define a configuração do pager para o projeto atual.
Define o pager globalmente para todos os projetos
fonte
git config --global core.pager "less -r"
man less
,-r
não diz nada sobre a embalagem.Com total crédito a Josh Diehl em um comentário a esta resposta , no entanto, sinto que isso deveria ser uma resposta em si mesma, acrescentando-a:
Uma maneira de lidar com as diferenças nas linhas longas é usar um diff orientado a palavras. Isso pode ser feito com:
Nesse caso, você obterá uma saída diff significativamente diferente, que mostra especificamente o que mudou dentro de uma linha.
Por exemplo, em vez de obter algo parecido com isto:
Você pode obter algo parecido com isto:
Ou, com colorização, em vez disso:
Você pode obter o seguinte:
Agora, se você estiver comparando uma linha muito longa, ainda poderá ter problemas com a situação do pager que descreveu originalmente e que foi abordada, aparentemente para satisfação, em outras respostas. Espero que isso ofereça uma nova ferramenta, no entanto, para identificar mais facilmente o que mudou na linha.
fonte
--word-diff
:color
,plain
eporcelain
. Além disso, pode-se alterar o regex para os limites de palavras--word-diff-regex
. O padrão parece ser\S+
. ( v2.1.1 )--color-words
parece ser uma abreviação--word-diff=color
, o que é bom quando você está apenas visualizando o diff, não o compartilhando.--word-diff=porcelain
mais do que--word-diff
porqueporcelain
alinhará as alterações em linhas separadas, enquanto--word-diff
colocá- las em linha. Linhas separadas permitem ver as diferenças mais facilmente quando as diferenças são sutis.Para usar menos como pager e tornar a quebra automática de linha permanente, basta ativar a opção dobrar linhas longas:
Dessa forma, você não precisa digitá-lo enquanto usa menos.
Felicidades
fonte
git config --global core.pager 'less -S
Apenas pesquisei este aqui.
GIT_PAGER='less -r'
funciona para mimfonte
less -R
(Na verdade, eu usoless -eiFRSX
, que problemas de cor resolve e linha-wrap também.)Mac OSX: Nenhuma das outras respostas, exceto o '-S' de alguém45, enquanto menos está funcionando, funcionou para mim. Foi necessário o seguinte para tornar a quebra de linha persistente:
fonte
-+$LESS
parâmetro está fazendo? A menos que o git o defina, minha variável de ambiente LESS nem está definida.$LESS
é definido com algum valor (por exemplo, por um.login
ou um.profile
ou algo), e acho que essa opção apenas adiciona os padrões e depois os acrescenta-FRX
.$LESS
é indefinido.Desde o Git 1.5.3 ( setembro de 2007 )
uma
--no-pager
opção está disponível.Como evito que o git diff use um pager?
Exemplo
A partir da v2.1, wrap é o padrão
Notas de versão do Git v2.1
fonte
Oito anos depois, encontro uma resposta superior, em /superuser/777617/line-wrapping-less-in-os-x-specifically-for-use-with-git-diff :
Agora você canaliza o diff do git através da dobra, primeiro e depois para menos: empacotado, menos altura da página está correta, mantenha o destaque da sintaxe.
fonte
Quando você estiver usando "git diff" e estiver mostrando várias páginas (você vê ":" no final da página), nesse caso, você pode digitar "-S" e pressionar Enter (S deve ser maiúsculo). irá alternar entre dobrar linhas longas.
fonte
Ninguém apontou isso até agora. É bem simples de lembrar e nenhuma configuração extra precisa ser feita na configuração do git
fonte
git diff --color | less -FR
para pequenas alterações quando não precisa de rolagemVocê pode simplesmente canalizar a saída do git diff para mais:
fonte
Não é uma solução perfeita, mas
gitk
egit-gui
pode mostrar tanto esta informação, e ter barras de rolagem.fonte
liste a configuração atual / padrão:
atualize e deixe de fora o -S como:
-S: Faz com que as linhas maiores que a largura da tela sejam cortadas em vez de dobradas.
fonte
Quando estou com problemas, costumo recorrer ao DiffMerge. Excelente ferramenta diff que possui destaque de diff em linha. Além disso, nas versões mais recentes, eles adicionaram um modo para ter um modo horizontal.
Eu não consegui configurar o git para usá-lo. Então, eu tenho que me esforçar para obter as duas versões do arquivo primeiro.
fonte