qaru.site/info/34621/..., казалось, был хорошим кандидатом для применения алгоритма ограничения терпения. Однако, проверяя мой потенциальный ответ, я обнаружил, что git diff --patience
не оправдывает моих ожиданий (и в этом случае ничем не отличается от стандартного diff алгоритм):
$ cat a
/**
* Function foo description.
*/
function foo() {}
/**
* Function bar description.
*/
function bar() {}
$ cat b
/**
* Function bar description.
*/
function bar() {}
$ git diff --no-index --patience a b
diff --git a/a b/b
index 3064e15..a93bad0 100644
--- a/a
+++ b/b
@@ -1,9 +1,4 @@
/**
- * Function foo description.
- */
-function foo() {}
-
-/**
* Function bar description.
*/
function bar() {}
Я бы ожидал, что diff будет:
diff --git a/a b/b
index 3064e15..a93bad0 100644
--- a/a
+++ b/b
@@ -1,8 +1,3 @@
-/**
- * Function foo description.
- */
-function foo() {}
-
/**
* Function bar description.
*/
В моем понимании уникальными общими строками в этом случае являются две строки, в которых упоминается бар, а самый длинный общий контекст вокруг этих строк должен быть функцией bar()
вместе с ее докблоком, что означает, что diff должен сводиться к удаленной функции foo()
вместе со своим собственным док-блоком и следующей пустой строкой.