alltools.one
Development
2025-07-02
7 min
alltools.one Team
DiffText ComparisonGitCode ReviewMerge

Como Comparar Ficheiros de Texto: Ferramentas e Técnicas Diff

Comparar texto é uma tarefa diária para programadores. Quer esteja a rever alterações de código, a depurar desvios de configuração ou a fundir documentos, compreender a saída diff é essencial. Este guia abrange os algoritmos, ferramentas e técnicas para uma comparação de texto eficaz.

Compreender a Saída Diff

O formato clássico unified diff mostra as alterações entre dois ficheiros:

--- original.txt
+++ modified.txt
@@ -1,5 +1,6 @@
 Line 1: unchanged
-Line 2: removed text
+Line 2: modified text
+Line 2.5: added line
 Line 3: unchanged
 Line 4: unchanged
-Line 5: also removed
  • As linhas que começam com - foram removidas (do original)
  • As linhas que começam com + foram adicionadas (na versão modificada)
  • As linhas que começam com (espaço) são contexto inalterado
  • Os marcadores @@ mostram os números de linha afetados

Algoritmos Diff

Algoritmo de Myers

O algoritmo predefinido utilizado pelo Git e pela maioria das ferramentas diff. Encontra o script de edição mais curto — o número mínimo de inserções e eliminações para transformar um ficheiro noutro. Produz diffs limpos e legíveis para a maioria do conteúdo.

Patience Diff

Melhor para texto estruturado como código-fonte. Em vez de encontrar a edição mais curta, primeiro faz a correspondência de linhas únicas que aparecem em ambos os ficheiros e depois aplica diff às secções entre elas. Isto frequentemente produz diffs mais significativos que se alinham com blocos lógicos de código.

git diff --patience

Histogram Diff

Uma melhoria do patience diff, utilizado como predefinição do Git desde a versão 2.x. Trata melhor linhas repetidas e produz saída mais limpa para ficheiros com alterações estruturais significativas.

Comparar Texto Online

Para comparações rápidas sem instalar ferramentas, o nosso Verificador de Diferenças de Texto oferece vistas lado a lado e em linha diretamente no seu navegador. Cole dois textos e veja as alterações destacadas instantaneamente — todo o processamento acontece localmente.

Ferramentas Diff de Linha de Comandos

diff (POSIX)

A ferramenta clássica Unix:

# Unified format (most readable)
diff -u file1.txt file2.txt

# Side-by-side
diff -y file1.txt file2.txt

# Ignore whitespace
diff -w file1.txt file2.txt

# Recursive directory comparison
diff -r dir1/ dir2/

git diff

Mesmo fora de um repositório Git, o git diff oferece saída superior:

# Compare two files
git diff --no-index file1.txt file2.txt

# Word-level diff (highlights changed words, not whole lines)
git diff --word-diff

# Stat summary (files changed, insertions, deletions)
git diff --stat

colordiff / delta

Para saída colorida no terminal:

# colordiff: drop-in replacement for diff
colordiff file1.txt file2.txt

# delta: modern diff viewer for Git
git diff | delta

Diff para Revisão de Código

Uma revisão de código eficaz depende de diffs legíveis. Eis técnicas para melhorar a qualidade do diff:

1. Manter os Commits Focados

Diffs grandes que abrangem centenas de linhas são difíceis de rever. Cada commit deve abordar uma preocupação:

  • Separar alterações de formatação de alterações de lógica
  • Dividir refatorações grandes em passos incrementais
  • Mover ficheiros num commit, modificá-los noutro

2. Utilizar Diff ao Nível da Palavra

Diffs ao nível da linha escondem a alteração real quando uma linha tem uma pequena modificação enterrada numa string longa:

# Shows only the changed words, not entire lines
git diff --word-diff

3. Ignorar Espaços em Branco nas Revisões

Alterações de formatação adicionam ruído a diffs significativos:

git diff -w        # Ignore all whitespace changes
git diff -b        # Ignore whitespace amount changes

4. Rever com Contexto

Mais linhas de contexto ajudam a compreender o código envolvente:

git diff -U10      # Show 10 lines of context (default is 3)

Tratar Conflitos de Merge

Quando o Git encontra alterações conflituantes, marca o conflito no ficheiro:

<<<<<<< HEAD
const timeout = 5000;
=======
const timeout = 10000;
>>>>>>> feature-branch

Para resolver:

  1. Compreender ambas as alterações — por que razão foi feita cada uma?
  2. Decidir qual versão manter, ou combiná-las
  3. Remover os marcadores de conflito
  4. Testar o resultado

Para merges complexos, utilize uma ferramenta de merge de três vias que mostra o ancestral comum juntamente com ambas as versões.

Comparar Conteúdo Não Textual

JSON Diff

O diff de texto padrão tem dificuldade com JSON porque a ordem das chaves e alterações de formatação criam ruído. O diff semântico de JSON compara a estrutura de dados real. Consulte a nossa ferramenta JSON Diff para comparação estrutural.

CSV Diff

Dados tabulares precisam de comparação consciente de colunas. O diff padrão trata cada linha como uma string, falhando alterações ao nível da célula.

Ficheiros Binários

O diff não consegue comparar ficheiros binários de forma significativa. Para imagens, utilize ferramentas de diff visual. Para documentos, converta primeiro para texto ou utilize ferramentas de comparação específicas do formato.

Diff em Automação

Pipelines CI/CD

Utilize diff para verificar saída esperada em testes:

command_under_test > actual_output.txt
diff expected_output.txt actual_output.txt
# Exit code 0 = identical, 1 = different

Deteção de Desvios de Configuração

Compare a configuração em produção com o estado esperado:

diff deployed_config.yaml expected_config.yaml

Rastreamento de Alterações na Documentação

Acompanhe alterações na documentação para revisão:

git diff --stat HEAD~5..HEAD -- docs/

FAQ

O que significa "hunk" na saída diff?

Um hunk é um bloco contíguo de alterações num diff. Cada linha @@ inicia um novo hunk. O Git agrupa alterações próximas em hunks únicos — se duas alterações estão a 3 linhas de distância uma da outra (o contexto predefinido), aparecem no mesmo hunk. Os hunks podem ser staged independentemente utilizando git add -p.

Como comparo dois ramos no Git?

Utilize git diff branch1..branch2 para ver todas as diferenças entre dois ramos. Adicione --stat para um resumo, ou -- path/to/file para comparar um ficheiro específico. Para comparar o que um ramo adicionou desde que divergiu, utilize três pontos: git diff branch1...branch2.

Recursos Relacionados

Published on 2025-07-02
How to Compare Text Files: Diff Tools and Techniques | alltools.one