Português (Brasil)

Ferramentas para desenvolvedores · Comparação de texto

Como ler uma comparação unificada: cabeçalhos de blocos, linhas de contexto e marcadores +/-

· Fundo

diferença de texto manchas fluxo de trabalho do desenvolvedor

Uma pilha de contexto, linhas removidas e adicionadas ao lado de dois rótulos de arquivo
Ilustração vetorial original ToolAcre

Decodifica o formato diff unificado linha por linha, desde cabeçalhos de arquivos e intervalos de pedaços @@ até linhas de contexto e marcadores de alteração, para que os patches de qualquer ferramenta façam sentido.

Uma parede de prós, contras e símbolos @@ — abre com o primeiro encontro com um patch em um e-mail ou pull request

Um `changes.patch` baixado começa com uma pontuação que se assemelha à saída diff familiar, mas sua estrutura exata é importante. ToolAcre grava dois rótulos e depois cada linha de comparação com um marcador de um caractere. Ler o que existe é mais seguro do que fornecer mentalmente campos de outro formato de patch.

Abra o arquivo em um editor de texto simples. As duas primeiras linhas identificam os rótulos esquerdo e direito fornecidos pela IU como `original` e `changed`. As linhas subsequentes reconstroem os textos comparados através de marcadores de contexto, remoção e adição.

As linhas de cabeçalho do arquivo — explicam as linhas --- e +++, os caminhos e as ferramentas de prefixos a/ e b/ adicionadas

O cabeçalho é `--- original` seguido por `+++ changed`. Em outras ferramentas, esses prefixos podem estar dentro de uma gramática de patch mais rica, mas este exportador não adiciona carimbos de data/hora, caminhos ou metadados. Os rótulos descrevem os lados, não os arquivos que comprovadamente existem no disco.

Essa distinção é importante porque Text diff aceita strings coladas em vez de objetos de arquivo. O download cria um relatório textual local após comparação. Tratar os rótulos como caminhos de repositório ou identificadores de revisão atribuiria uma procedência que a IU nunca coletou.

Explicação dos cabeçalhos de pedaço - decodifica @@ -12,7 +12,8 @@ como linha inicial e contagem de linhas para cada lado

Não há linhas começando com `@@` em `toUnifiedText`. A função mapeia diretamente todas as linhas após os dois rótulos. Conseqüentemente, esta saída não possui intervalos de blocos para decodificar e nenhum par start-line/count incorporado no texto baixado.

Os números das linhas permanecem disponíveis na visualização renderizada do navegador, onde as linhas carregam as posições esquerda e direita. A exportação escolhe uma representação mais simples. Se um programa downstream exigir blocos unificados com padrões completos, verifique a compatibilidade em vez de assumir que a extensão `.patch` fornece sintaxe ausente.

ToolAcre não emite cabeçalhos @@, portanto não há nenhum para decodificar

Um espaço à esquerda marca uma linha inalterada, menos marca uma remoção à esquerda e mais marca uma adição à direita. A IU pode recolher visualmente longas execuções iguais, mas `lastDiff` retém o resultado completo e o download serializa todas as linhas. Nenhum marcador de salto entra na string do patch.

O esboço mencionou três linhas de contexto como padrão. Três é usado pela chamada de colapso visual, não pela exportação. Combinar esses caminhos subestimaria o conteúdo baixado. A apresentação e a serialização compartilham linhas, mas aplicam transformações diferentes.

O download marca cada linha e não usa um contexto padrão de três linhas

Compare `a b` esquerdo com `a c` direito. As linhas exportadas são os dois rótulos, depois espaço-a, menos-b e mais-c. Lendo de cima para baixo diz que `a` sobrevive, `b` sai do original e `c` entra no lado alterado.

Uma modificação é, portanto, representada como remoção e adição adjacente quando o alinhamento as coloca juntas. O formato não o chama de “modificado”. Se linhas repetidas permitirem outro alinhamento, a sequência poderá parecer diferente, embora ainda leve em conta cada linha de entrada.

Exemplo resolvido: leia o fluxo completo em forma de patch que ToolAcre realmente exporta

Os formatos normal, de contexto e de comparação unificada completa têm suas próprias especificações e históricos, mas não são implementados ou documentados pelo conjunto de origem usado aqui. Este artigo não afirma por que um formato se tornou popular ou os campos de lista ToolAcre não emitem.

Use um comando de controle de versão quando outra ferramenta precisar aplicar o patch. O download de ToolAcre é útil como um artefato de revisão portátil, mas o repositório não contém nenhum analisador de patch ou função de aplicação que prove que ele pode fazer uma viagem de ida e volta através de consumidores de patch arbitrários.

Comparações completas, unificadas, de contexto e de formato normal requerem fontes externas

Patches binários, renomeação de cabeçalhos, mudanças de modo e aplicação estão fora desta rota. O texto não contém identificadores de objeto ou ancestral comum. Ele não pode representar uma operação de repositório simplesmente porque seus marcadores parecem familiares.

O exportador também reflete opções de comparação ativas. Uma linha considerada igual após a normalização de maiúsculas e minúsculas ou espaços em branco carrega apenas o texto original à esquerda, portanto, o documento em forma de patch não é uma reconstrução byte por byte de ambas as entradas sob correspondência flexível.

Conclusão: uma comparação é uma história compactada - resume a ordem de leitura e observa como a comparação de texto de ToolAcre mostra os mesmos tipos de alterações que as linhas destacadas para uma revisão rápida

Leia os dois rótulos primeiro e depois interprete cada linha prefixada em ordem. Se precisar de números de linha renderizados, retorne à visualização do navegador. Se você precisar de blocos completos de padrões, gere-os com uma ferramenta que documente esse contrato.

ToolAcre fornece uma maneira compacta de levar a comparação para fora da página sem pretender implementar todos os recursos de patch. Esse nome mais restrito – saída em forma de patch – mantém as expectativas alinhadas com a função exata e evita uma falsa promessa de compatibilidade de aplicativos.