Preciso da diferença (mudanças baseadas nas palavras) entre essas duas linhas simples:
<h1>Intro line 06.03.2004</h1>
e:
<h1>Intro line 15.08.2024</h1>
O comando de comparação:
git diff --word-diff file1.txt file2.txt
A saída:
<h1>Intro line [-06.03.2004</h1>-]{+15.08.2024</h1>+}
Meu problema é que ele também está pegando o trailing </h1>
, embora essa parte não tenha mudado. Eu também tentei o switch cli, --minimal
mas sem sucesso. Como posso reduzir a mudança marcada ao mínimo? Fico feliz por um conselho!
Preste atenção, mínimo tem uma definição! Você não quer isso, essa diferença seria:
e praticamente ilegível.
Por padrão,
--word-diff
assume que qualquer sequência de caracteres que não sejam espaços em branco seja uma única palavra. Então, o que você vê é exatamente o que está documentado emgit help diff
!O que você precisaria fazer é especificar um
--word-diff-regex
. Você poderia simplesmente usar algo como[^<> ]*
, mas isso não será bom o suficiente se você realmente começar a mudar as tags.a questão aqui se torna para qual propósito você precisa fazer essas diferenças. Talvez seja melhor usar algo como
git diff --name-only REVISION
para obter os nomes de arquivo alterados, filtrá-los para conteúdo XML e, em seguidagit --no-pager REVISION:path/to/changed/file > tmp
, um programa comoxmldiffs
para comparar XML real. (se seus documentos forem XML. Se forem HTML verdadeiro, o que infelizmente não é o dialeto XML amigável que alguém pode ser tentado a pensar – a menos que seja realmente XHMTL, mas em geral, HTML 5 não é.)Supondo que o texto que você mostrou ocorreu em um arquivo
foo.html
, você pode editar seu.gitattributes
arquivo para incluir esta linha:Isto usa o driver "worddiff" embutido para a linguagem HTML (que também funciona para XML, BTW). Ele produz este diff:
Aqui está uma lista de drivers diff integrados .