Mungkin cocok dengan kode yang dipindahkan dan baris yang dimodifikasi yang bisa jauh lebih lambat
codymanix
Saya telah mengekstrak skrip mandiri untuk Patience Diff dari Bazaar, Anda dapat menemukannya di utas SO lainnya .
TryPyPy
38
Pertanyaan lanjutan. Kapan saya sebaiknya tidak menggunakan kesabaran berbeda?
balki
4
Ada juga --histogramparameter yang "... memperluas algoritme kesabaran untuk" mendukung elemen umum yang tidak banyak terjadi " git-scm.com/docs/git-diff.html
Robert
Jawaban:
183
Anda dapat membaca posting dari Bram Cohen , penulis algoritma kesabaran berbeda, tetapi saya menemukan posting blog ini untuk merangkum algoritme kesabaran berbeda dengan sangat baik:
Patience Diff, sebaliknya, memfokuskan energinya pada jalur konten tinggi frekuensi rendah yang berfungsi sebagai penanda atau tanda tangan konten penting dalam teks. Ini masih merupakan diff berbasis LCS pada intinya, tetapi dengan perbedaan penting, karena hanya mempertimbangkan urutan umum terpanjang dari garis tanda tangan:
Temukan semua garis yang muncul tepat sekali di kedua sisi, lalu lakukan urutan terpanjang bersama pada garis-garis tersebut, sesuaikan.
Kapan sebaiknya Anda menggunakan kesabaran berbeda? Menurut Bram, kesabaran berbeda baik untuk situasi ini:
Kasus yang benar-benar buruk adalah kasus di mana dua versi telah menyimpang secara dramatis dan pengembang tidak berhati-hati untuk menjaga ukuran tambalan tetap terkendali. Dalam keadaan itu, sebuah algoritma diff kadang-kadang bisa menjadi 'tidak selaras' karena cocok dengan bagian kurung keriting yang panjang bersama-sama, tetapi akhirnya mengkorelasikan kurung keriting fungsi dalam satu versi dengan kurung keriting dari fungsi selanjutnya berikutnya di versi lain. Situasi ini sangat jelek , dan dapat menghasilkan file konflik yang sama sekali tidak dapat digunakan dalam situasi di mana Anda paling membutuhkan hal-hal seperti itu untuk disajikan secara koheren.
Dalam pengalaman saya dengan XML untuk saat ini, ia memberikan hasil "buruk" yang sama persis dengan perbedaan normal.
stivlo
5
Saya sudah lebih beruntung dengan kesabaran berbeda dengan XML; tentu saja diff yang saya lihat saat ini memiliki masalah misalignment yang dijelaskan dengan algoritma diff biasa, tetapi terlihat benar-benar hebat dengan kesabaran diff.
Saya menemukan blog ini sangat menarik dan memberikan penjelasan yang baik dengan tautan lebih lanjut ke detail algoritme: fabiensanglard.net/git_code_review/diff.php Semoga bermanfaat bagi seseorang
--histogram
parameter yang "... memperluas algoritme kesabaran untuk" mendukung elemen umum yang tidak banyak terjadi " git-scm.com/docs/git-diff.htmlJawaban:
Anda dapat membaca posting dari Bram Cohen , penulis algoritma kesabaran berbeda, tetapi saya menemukan posting blog ini untuk merangkum algoritme kesabaran berbeda dengan sangat baik:
Kapan sebaiknya Anda menggunakan kesabaran berbeda? Menurut Bram, kesabaran berbeda baik untuk situasi ini:
sumber
Anda juga dapat menggunakannya untuk penggabungan (berfungsi sangat baik di sini untuk beberapa konflik XML):
sumber
git config --global diff.algorithm patience
git merge -X patience
.Algoritma beda kesabaran adalah algoritma beda lebih lambat yang menunjukkan hasil yang lebih baik dalam beberapa kasus.
Misalkan Anda memiliki file berikut check in ke git:
Sekarang kami menyusun ulang bagian dan menambahkan baris baru:
Algoritma diff default mengklaim bahwa judul bagian telah berubah:
Sedangkan beda kesabaran menunjukkan hasil yang bisa dibilang lebih intuitif:
Ada diskusi yang bagus tentang kualitas perbedaan subjektif di sini , dan git 2.11 sedang mengeksplorasi heuristik lebih jauh .
Perhatikan bahwa algoritme kesabaran berbeda masih memiliki beberapa kasus patologis yang diketahui .
sumber