Чим алгоритм терпіння відрізняється від алгоритму за замовчуванням git diff
, і коли я хочу його використовувати?
--histogram
параметр, який "... розширює алгоритм терпіння на" підтримку загальних елементів із низькою частотою зустрічі
Чим алгоритм терпіння відрізняється від алгоритму за замовчуванням git diff
, і коли я хочу його використовувати?
--histogram
параметр, який "... розширює алгоритм терпіння на" підтримку загальних елементів із низькою частотою зустрічі
Відповіді:
Ви можете прочитати публікацію від Брема Коена , автора алгоритму терпіння різниці, але я знайшов цю публікацію в блозі, щоб дуже добре узагальнити алгоритм терпіння різниці:
Натомість терпіння Diff зосереджує свою енергію на низькочастотних лініях з високим вмістом, які служать маркерами або підписами важливого вмісту в тексті. Це все ще є основою LCS, що є основою, але з важливою відмінністю, оскільки вона розглядає лише найдовшу загальну послідовність рядків підписів:
Знайдіть усі рядки, які трапляються рівно один раз на обидві сторони, а потім зробіть найдовший загальний підряд на цих лініях, співставляючи їх.
Коли слід використовувати терпіння різниці? За словами Брема, для цієї ситуації добре терпіння:
Дійсно погані випадки - це випадки, коли дві версії різко розходилися, і розробник не дбає про те, щоб тримати під контролем розміри патчів. За таких обставин алгоритм розрізнення може періодично бути «нерівним», оскільки він відповідає довгим ділянкам фігурних дужок разом, але він завершує співвіднесення фігурних дужок функцій в одній версії з фігурними дужками наступної пізнішої функції в іншій версії. Ця ситуація є дуже потворною , і може призвести до абсолютно непридатного файлу конфлікту в ситуації, коли потрібні такі речі, щоб їх було представлено більш повно.
Алгоритм терпіння різниці - це більш повільний алгоритм, який показує кращі результати в деяких випадках.
Припустимо, у вас встановлений такий файл, щоб увімкнути git:
.foo1 {
margin: 0;
}
.bar {
margin: 0;
}
Тепер ми упорядковуємо розділи та додаємо новий рядок:
.bar {
margin: 0;
}
.foo1 {
margin: 0;
color: green;
}
За замовчуванням алгоритм diff стверджує, що заголовки розділів змінилися:
$ 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;
}
Тоді як терпіння відрізняється від результату, який, мабуть, більш інтуїтивно зрозумілий:
$ 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;
+}
Тут добре обговорюється суб'єктивна різна якість , і git 2.11 вивчає діючу евристику далі .
Зауважимо, що алгоритм терпіння різкості все ще має деякі відомі патологічні випадки .