In che modo l'algoritmo di pazienza differisce dall'algoritmo predefinito git diff
e quando si desidera utilizzarlo?Per cosa è `git diff --patience`?
risposta
Potete leggere a post from Bram Cohen, l'autore dell'algoritmo di pazienza diff, ma ho trovato this blog post di riassumere l'algoritmo diff pazienza molto bene:
Pazienza Diff, invece, concentra la sua energia sulla bassa frequenza alta - linee di contenuto che fungono da indicatori o firme di contenuti importanti nel testo. E 'ancora un diff LCS basata al suo interno, ma con una differenza importante, in quanto considera solo la più lunga sottosequenza comune delle linee di firma:
trovare tutte le righe che si verificano esattamente una volta su entrambi i lati, quindi fare più lunga sottosequenza comune su quelle linee, abbinandole.
Quando si dovrebbe utilizzare pazienza diff? Secondo Bram, la pazienza diff è buono per questa situazione:
I casi davvero male sono quelli in cui due versioni divergono drammaticamente e lo sviluppatore non è facendo attenzione a tenere la dimensione delle patch sotto controllo. In tali circostanze un algoritmo diff può a volte diventare "disallineato" in quanto combacia insieme a lunghe sezioni di parentesi graffe , ma termina correlando le parentesi graffe delle funzioni in una versione con le parentesi graffe della funzione successiva successiva nel altra versione. Questa situazione è molto brutta e può risultare in un file di conflitto inutilizzabile nella situazione in cui è necessario che tali elementi siano presentati in modo coerente in modo coerente.
Nella mia esperienza con XML per ora, dà esattamente gli stessi risultati "cattivi" di un normale diff. – stivlo
Ho avuto molta più fortuna con pazienza rispetto a XML, sicuramente il differenziale che sto guardando attualmente ha esattamente il problema di disallineamento descritto con normale algoritmo diff, ma sembra assolutamente grande con pazienza diff. –
Questo blog ha una grande spiegazione, tra cui una gif animata del processo: http://alfedenzo.livejournal.com/170301.html – Quantum7
La pazienza è un algoritmo diff più lento che mostra risultati migliori in alcuni casi.
Supponiamo di avere il seguente file controllato in git:
.foo1 {
margin: 0;
}
.bar {
margin: 0;
}
Ora abbiamo riordinare le sezioni e aggiungere una nuova linea:
.bar {
margin: 0;
}
.foo1 {
margin: 0;
color: green;
}
L'algoritmo di default diff sostiene che i titoli delle sezioni hanno modificato:
$ git diff --diff-algorithm=myers
diff --git a/example.css b/example.css
index 7f1bd1e..6a64c6f 100755
--- a/example.css
+++ b/example.css
@@ -1,7 +1,8 @@
-.foo1 {
+.bar {
margin: 0;
}
-.bar {
+.foo1 {
margin: 0;
+ color: green;
}
Mentre la pazienza diff mostra un risultato che è discutibilmente più intuitivo:
$ git diff --diff-algorithm=patience
diff --git a/example.css b/example.css
index 7f1bd1e..6a64c6f 100755
--- a/example.css
+++ b/example.css
@@ -1,7 +1,8 @@
-.foo1 {
- margin: 0;
-}
-
.bar {
margin: 0;
}
+
+.foo1 {
+ margin: 0;
+ color: green;
+}
C'è a good discussion of subjective diff quality here e git 2.11 is exploring diff heuristics further.
Si noti che il patience diff algorithm still has some known pathological cases.
- 1. Utilizzare l'algoritmo diff di pazienza di Git per aggiungere interattivo
- 2. Posso passare "git gui", ad esempio "--paziente" a "git diff"?
- 3. diff git con combinato --word-diff
- 4. Come configurare 'git diff' per usare emacs diff
- 5. Cosa significa quando Git diff mostra le modifiche alla modalità?
- 6. Git diff - come uscire dal listato diff
- 7. Cosa significano due segni più in un git diff?
- 8. Git diff in sintesi?
- 9. Diff a git fork
- 10. Git-diff a HTML
- 11. GIT diff GUI
- 12. È possibile impostare --word-diff come predefinito in git diff, git gui, gitk
- 13. Reading uscita git diff
- 14. Usa sempre il cercapersone per git diff
- 15. Ottieni diff git per ogni ramo unito
- 16. git diff filtrato per nome file
- 17. git: Perché git diff non mostra differenze?
- 18. Cosa significa "@@ ... @@" con i segni in svn diff o git diff?
- 19. git diff --word-diff con file on line
- 20. voci Personalizzazione in git diff
- 21. git diff non mostra abbastanza
- 22. Come annullare il git diff?
- 23. diff git nel mio mvim
- 24. git vedere l'intera fusione diff
- 25. Git diff con tag remoto
- 26. git diff con filtro autore
- 27. colorato Git diff in HTML
- 28. Perché la modifica del risultato HEAD git diff-index per i file toccati dopo lo stato git diff o git?
- 29. git creare patch con diff
- 30. Come rendere git-diff creare un formato "contesto" diff?
Forse corrisponde a codice spostato e righe modificate che possono essere molto più lente – codymanix
Ho estratto uno script standalone per Patience Diff da Bazaar, lo puoi trovare in [altro thread SO] (http://stackoverflow.com/questions/4599456/testualmente-diffing-jSON/4599500 # 4599500). – TryPyPy
Una domanda successiva. Quando non dovrei usare pazience diff? – balki