Как я могу получить diff, чтобы остановить искажение функции docblocks? - PullRequest
2 голосов
/ 12 сентября 2011

Если я добавлю функцию к своему коду, мой diff будет выглядеть так:

 }

 /**
+ * My new function docblock.
+ */
+function my_function($foo) { }
+
+/**
  * The next function's docblock.
  *

Есть ли способ, чтобы не помешать diff это искажать?

Я попробовал git's --patienceфлаг, но это дает тот же результат.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2011

Вам нужен инструмент, который сравнивает программные структуры, а не «строки текста».

См. Наши SmartDifferencer инструменты, которые сравнивают исходный текст программ, используя структуруязык программирования в качестве руководства.Существует SmartDifferencer для многих языков (C ++, C #, Java, COBOL, ...)

Для примера OP следует просто отметить, что функция (и ее докблок) были добавлены.

0 голосов
/ 27 декабря 2011

Если то, что вы ожидаете, будет лучше различий, который "поймет" присутствие в сравнении блока комментариев и выровнит разность таким образом, чтобы не разбивать эти блоки, вы в настоящий момент отключены.

Внутренний алгоритм «diff» автоматически выравнивает блок по строке с наибольшим числом, для которого разница все еще «истинна».Например, вместо

 }

+/**
+ * My new function docblock.
+ */
+function my_function($foo) { }
+
 /**
  * The next function's docblock.
  *

Diff всегда будет возвращать результат, который вы описали в своем вопросе.Многие инструменты, основанные на GNU diff, страдают от этой проблемы.

...