MiServe DevTools

Os seus autocolantes

Fixe aqui as ferramentas. Ficam guardadas neste navegador.

Comparador de textos (diff)

Compare dois textos linha a linha, veja o que foi adicionado, removido e alterado dentro de cada linha, e copie o resultado como diff unificado.

Funciona no seu navegador. Nada do que cola é enviado.

Sobre esta ferramenta

Como funciona a comparação

A comparação procura a lista mais curta de linhas a remover do primeiro texto e de linhas a adicionar-lhe que o transforma no segundo. Encontrar essa lista é o mesmo problema que encontrar a maior subsequência comum: a maior série de linhas que aparecem nos dois textos pela mesma ordem. Esta ferramenta usa o algoritmo que Eugene Myers publicou em 1986, o que está por trás do diff do GNU e é o predefinido no Git, na sua versão de espaço linear, para que a memória usada se mantenha proporcional ao tamanho dos textos.

Quando uma linha removida e uma linha adicionada ocupam o mesmo lugar num bloco alterado, as duas são comparadas de novo palavra a palavra e as palavras que diferem são realçadas. Se as duas linhas tiverem pouco em comum, são mostradas como uma simples remoção e adição, porque realçar quase tudo não diria nada.

Ler o resultado

Uma linha marcada com − só existe no texto original, e uma linha marcada com + só existe no texto alterado. Por isso, uma linha alterada aparece duas vezes: uma vez removida, outra adicionada. As duas colunas de números são os números de linha no texto original e no texto alterado. O significado está nos marcadores; as cores só o repetem.

A vista unificada põe tudo numa só coluna, que é a ordem usada por um ficheiro de patch. A vista lado a lado mantém cada texto na sua coluna e alinha as linhas que se correspondem.

O formato de diff unificado

Copiar como diff unificado produz o formato de diff -u e git diff. As alterações são agrupadas em blocos (hunks) com três linhas inalteradas de contexto à volta. Cada bloco começa com um cabeçalho como @@ -1,7 +1,8 @@, que se lê assim: sete linhas a partir da linha 1 do original correspondem a oito linhas a partir da linha 1 do texto alterado.

A linha \ No newline at end of file faz parte do formato. Aparece quando um texto não termina com uma quebra de linha, para que um patch consiga reproduzir o ficheiro exatamente. As vistas da página ignoram essa diferença, porque uma última linha que parece idêntica não deve ser apresentada como alterada.

Perguntas

O texto que comparo é enviado para algum lado?

Não. A comparação é feita por JavaScript no separador do seu navegador. A ferramenta não faz nenhum pedido de rede com o que cola, e a política de segurança do site bloqueia pedidos a qualquer outro servidor.

Porque é que uma linha aparece como alterada quando parece igual?

A diferença costuma ser invisível: espaços no fim da linha, uma tabulação em vez de espaços, um espaço inseparável, ou uma letra acentuada guardada como dois caracteres em vez de um. Ative a opção de ignorar alterações de espaços em branco para excluir as três primeiras.

Posso aplicar o diff copiado com o patch?

Sim. Guarde-o num ficheiro e execute o patch com o nome do ficheiro a alterar, por exemplo: patch notes.txt changes.diff. Se copiou o diff com uma opção de ignorar ativada, as diferenças ignoradas não estão nele, por isso o ficheiro alterado pelo patch não vai coincidir exatamente com o texto alterado.

Qual pode ser o tamanho dos textos?

Textos com alguns milhares de linhas são comparados numa fração de segundo. A página desenha no máximo 5000 linhas, mas o diff copiado contém sempre todas as alterações. Para dois textos muito longos quase sem nada em comum, a procura é interrompida e o resultado pode ser mais longo do que o necessário.

Mais ferramentas de Texto