Ferramenta de Comparação de Texto
O que é Diff de Texto?
Text Diff compara duas versões de texto e destaca quais linhas ou trechos foram adicionados, removidos, alterados ou mantidos. Ele é útil para revisar trechos de código, arquivos de configuração, traduções, rascunhos de contrato, documentos Markdown, versões de prompts, notas de release e partes de logs sem ler manualmente as duas cópias lado a lado. A ferramenta é especialmente valiosa quando uma edição pequena está escondida em um conteúdo longo ou quando formatação, espaços, pontuação ou ordem podem ter mudado sem querer. Um diff não decide se a nova versão está correta; ele mostra onde os textos divergem para orientar a revisão.
Como Usar
Como usar
- Cole o texto original na caixa de entrada à esquerda
- Cole o texto modificado na caixa de entrada à direita
- O sistema calcula e destaca automaticamente as diferenças, e a barra de status mostra a contagem de linhas adicionadas e removidas
Dicas de Revisão
- Normalize quebras de linha e espaços antes de comparar quando a mudança real está no conteúdo e não na formatação.
- Em código ou textos legais, revise manualmente as alterações destacadas; o diff automático mostra as diferenças, mas não avalia intenção nem correção.
Casos de uso
Princípio técnico
O diff em nível de linha é construído sobre o problema da Subsequência Comum Mais Longa (LCS): dadas duas sequências de linhas A e B, encontrar a maior sequência que aparece em ambas na mesma ordem relativa. Tudo o que não está no LCS é uma inserção (presente em B mas não em A) ou uma exclusão (presente em A mas não em B), que é exatamente o conjunto de linhas vermelhas e verdes exibidas na visualização lado a lado. A tabela de programação dinâmica ingênua do LCS roda em tempo e espaço O(M × N), onde M e N são as contagens de linhas das duas entradas. Na prática, o mecanismo de diff usa o algoritmo de diff de Myers (Eugene Myers, 1986), que resolve o mesmo problema em tempo O((M + N) × D), onde D é a distância de edição entre os dois arquivos. Para dois arquivos que são majoritariamente idênticos, D é pequeno e Myers é dramaticamente mais rápido que a tabela completa de PD; o backend de diff padrão do Git, a visualização de diff web do GitHub e a maioria dos painéis de diff de IDEs usam Myers ou um de seus descendentes (patience diff, histogram diff) exatamente por essa razão. O patience diff adicionalmente alinha primeiro em linhas de ocorrência única, o que produz blocos mais legíveis quando trechos de código foram movidos. A saída é uma sequência de operações igual/inserir/excluir renderizada como diff unificado em ferramentas de CLI (com cabeçalhos de bloco @@ -m,n +p,q @@ e um único prefixo +/- por linha) ou como linhas coloridas lado a lado em uma interface web. Diffs em nível de caractere ou palavra usam o mesmo algoritmo em uma sequência de granularidade mais fina, frequentemente combinado com a distância de Levenshtein (custos de inserção + exclusão + substituição) quando substituições precisam ser contadas como uma única operação. A biblioteca diff-match-patch de Neil Fraser é a implementação de referência comum para diffs em nível de caractere baseados na web.
- Base LCS: a Subsequência Comum Mais Longa dos dois arrays de linhas define as linhas inalteradas; tudo o mais é uma inserção ou exclusão
- Myers diff (1986): tempo O((M + N) × D) onde D é a distância de edição; backend padrão no Git, GitHub e na maioria das visualizações de diff de IDEs
- PD ingênua: tempo e espaço O(M × N) — adequada para entradas pequenas, mas a memória quadrática a torna impraticável para arquivos grandes
- Patience diff: alinha primeiro em linhas de ocorrência única; produz blocos mais limpos para trechos movidos ou reordenados
- Formatos de saída: diff unificado com cabeçalhos de bloco @@ -m,n +p,q @@ para CLI; linhas coloridas lado a lado para interface web
- Granularidade: diffs em nível de linha / palavra / caractere aplicam o mesmo algoritmo a uma segmentação diferente da entrada
- Distância de Levenshtein: conta inserções + exclusões + substituições; diff-match-patch é a biblioteca web de referência
Exemplos
Identificar uma alteração de uma palavra dentro de um parágrafo
Original:
The server starts on port 3000 by default.
Modificado:
The server starts on port 8080 by default.
Resultado: 1 linha alterada (3000 -> 8080)Comparar duas versões de um bloco de configuração
Original: Modificado:
timeout: 30 timeout: 60
retries: 3 retries: 3
debug: false debug: true
log_level: info
Resultado: 2 linhas adicionadas, 2 linhas removidasDiff entre notas de versão antes e depois
Removido (vermelho):
- Fixed login redirect on Safari 16
Adicionado (verde):
- Fixed login redirect on Safari 16 and 17
- Added dark mode preference sync
Resultado: 2 linhas adicionadas, 1 linha removidaDetectar chaves JSON reordenadas
Original: Modificado:
{ "name": "alice", { "id": 1,
"id": 1, "name": "alice",
"role": "admin" } "role": "admin" }
Resultado: 2 linhas alteradas (ordem das chaves difere, valores idênticos)Perguntas frequentes
Que tipo de diff ele mostra?
Diff em nível de linha. A página mostra dois painéis lado a lado: linhas removidas destacadas em vermelho à esquerda, linhas adicionadas destacadas em verde à direita. Os números de linha ajudam a localizar as alterações. A barra de status mostra a contagem de linhas adicionadas e removidas.
Qual algoritmo de diff é usado?
A página usa um algoritmo de Maior Subsequência Comum (LCS) para calcular o script de edição em nível de linha. Para tamanhos de documento típicos isso roda em tempo real à medida que você digita. O algoritmo encontra a sequência mais curta de inserções e exclusões para transformar o texto da esquerda no da direita.
Por que o diff parece diferente do git diff?
O Git usa sua própria implementação de diff com algoritmos configuráveis. Esta página usa um diff baseado em LCS em JavaScript que roda inteiramente no navegador. O formato de saída e os limites dos hunks podem diferir ligeiramente do git diff, mas a detecção de edições subjacente é correta para comparação de texto em nível de linha.
Posso fazer diff só dentro de um parágrafo ou frase?
Sim — cole cada versão em um lado. A página também oferece destaque em nível de caractere dentro das linhas alteradas, o que faz 'rename foo to bar' aparecer como substituição inline em vez de duas mudanças não relacionadas.
Ele ignora espaços em branco?
Não. O diff é sensível a espaços em branco por padrão. Diferenças de espaço (espaços ao final, linhas em branco extras, finais de linha diferentes) são exibidas como alterações.
Posso fazer diff de JSON ou XML estruturalmente?
O diff de texto puro é baseado em linhas. Para fazer diff de JSON por chave (chave 'a' movida da posição 1 para 3 com o mesmo valor = sem alteração), use uma ferramenta de diff que entenda JSON (jsondiffpatch, json-diff). Esta página é para comparação textual.
Meu texto é enviado para algum servidor?
Não. O diff roda no seu navegador. Ambas as entradas são processadas localmente e não são transmitidas.