Obtendo o diff (ou git diff) para mostrar corretamente os blocos inseridos

7

Digamos que eu tenha dois arquivos. O primeiro tem o conteúdo:

line 1
foo
line 2

line 1
bar
line 2

E o segundo tem uma nova seção inserida no meio, então é assim:

line 1
foo
line 2

line 1
new text
line 2

line 1
bar
line 2

Agora, quando eu faço um "diff -u", recebo uma saída assim:

--- file1   2013-06-25 16:27:43.170231844 -0500
+++ file2   2013-06-25 16:27:59.218757056 -0500
@@ -1,7 +1,11 @@
line 1
foo
line 2

line 1
+new text
+line 2
+
+line 1
bar
line 2

Isso não reflete adequadamente que a estrofe intermediária foi inserida - em vez disso, faz parecer que a segunda estrofe foi alterada e uma nova adicionada ao final (isso ocorre porque o algoritmo começa na primeira linha diferente). ).

Existe alguma maneira de obter diff (por si só ou usando o git diff) para mostrar esta saída?

--- file1   2013-06-25 16:27:43.170231844 -0500
+++ file2   2013-06-25 16:27:59.218757056 -0500
@@ -1,7 +1,11 @@
line 1
foo
line 2
+
+line 1
+new text
+line 2

line 1
bar
line 2

Isso é principalmente um problema ao gerar um patch para alguém revisar, onde uma nova função é inserida em um grupo de funções semelhantes. O comportamento padrão não reflete o que realmente mudou.

    
por Derek Pressnall 25.06.2013 / 23:46

3 respostas

2

O Git 2.9 foi lançado no início deste ano e incluiu o sinalizador experimental --compaction-heuristic no comando git diff :

In 2.9, Git's diff engine learned a new heuristic: it tries to keep hunk boundaries at blank lines, shifting the hunk "up" whenever the bottom of the hunk matches the bottom of the preceding context, until we hit a blank line.

Eu não acho que o GitHub esteja habilitado para diffs na interface do usuário da web para solicitações pull e comparações, mas você pode fazer isso localmente. Eu recomendo usá-lo em conjunto com --word-diff se você precisar desse nível de granularidade.

Mais detalhes disponíveis no blog do GitHub: link

    
por 24.11.2016 / 16:13
1

O algoritmo de diferença de paciência ( git diff --patience ) pode fornecer resultados mais naturais, embora não em todos os casos.

    
por 26.06.2013 / 00:44
0

Em certos casos, o comando git diff --word-diff (ou --color-words) pode fornecer resultados com melhor aparência

    
por 03.09.2014 / 12:26

Tags