Comparar textos
Cole o original e a versão alterada para ver cada diferença destacada, até palavras individuais.
Cole texto nos dois campos para comparar.
Como funciona
A comparação procura a menor sequência de linhas adicionadas e removidas que transforma um texto no outro, usando o algoritmo de Eugene Myers, de 1986. É o mesmo método que o git usa por padrão. Depois, as linhas alteradas são comparadas palavra por palavra, para que você veja exatamente o que mudou.
Linhas adicionadas aparecem com fundo verde e linhas removidas, com fundo vermelho. Uma linha alterada conta como uma removida e uma adicionada, como em outras ferramentas de diff.
Ignorar maiúsculas e minúsculas trata Olá e olá como iguais. Ignorar espaços desconsidera espaços no início e no fim da linha e sequências de vários espaços, o que ajuda quando a indentação mudou.
O diff unificado (unified diff) é o formato de texto gerado por diff -u, com três linhas de contexto em torno de cada alteração. Ele pode ser colado em um relatório de bug ou lido por patch e git apply.
Seus textos nunca saem do seu navegador. Textos muito longos que diferem quase por completo não são comparados linha por linha; nesse caso, todas as linhas aparecem como alteradas.
Como a ferramenta compara
As linhas iguais no início e no fim ficam de lado, porque não podem fazer parte de nenhuma alteração. Entre elas, o algoritmo de Myers encontra a menor sequência de linhas removidas e adicionadas. Finais de linha em CR LF ou só em CR são convertidos antes em LF, então o mesmo texto vindo do Windows e de um Mac conta como igual. Dentro de uma alteração, as linhas removidas aparecem antes das adicionadas e são pareadas em ordem para a comparação palavra por palavra. As palavras são separadas em espaços e pontuação, então uma vírgula alterada é marcada sozinha.
Exemplo
Compare as linhas maçã, banana, cereja com maçã, banana nanica, cereja, damasco, os dois textos terminando com quebra de linha. O algoritmo mantém maçã e cereja, remove banana e acrescenta banana nanica e damasco: duas linhas adicionadas e uma removida. A linha banana nanica é pareada com banana, e só a palavra nanica, com o espaço antes dela, é marcada como nova. No diff unificado isso é um único bloco com o cabeçalho @@ -1,3 +1,4 @@: ele começa na linha 1 nos dois textos e abrange três linhas do antigo e quatro do novo.
Sem quebra de linha depois da última linha, o resultado muda. Pelo GNU Diffutils, uma última linha sem quebra de linha não é igual à mesma linha com quebra, e cereja era a última linha só no texto antigo. A ferramenta então mostra cereja como removida e adicionada, três linhas adicionadas e duas removidas, e escreve \ No newline at end of file depois da última linha de cada texto, como faz o diff -u. Lado a lado e em uma coluna, a linha removida cereja recebe a marcação “sem quebra de linha no final”, já que de outro modo pareceria inalterada. Ignorar espaços desfaz essa diferença.
Limites
O trabalho tem um teto de 4000 alterações no nível das linhas. Dois textos de 2001 linhas totalmente diferentes cada um passam do limite, e então todas as linhas aparecem como removidas e adicionadas, sem comparação. No nível das palavras o teto é de 2000 alterações por par de linhas, e se mais de 80 % dos caracteres mudaram, a linha aparece inteira, sem marcação de palavras.
O que não aparece
Blocos movidos não são reconhecidos, porque o algoritmo só conhece remoção e acréscimo. Mova as duas primeiras linhas de um texto de cinco linhas para logo antes da última e a ferramenta mostra duas linhas removidas e duas adicionadas. Ignorar espaços junta sequências de espaços dentro da linha, mas não os remove: a,b e a, b continuam diferentes.