Знать различия двух версий кода с очень разным форматированием - PullRequest
1 голос
/ 24 февраля 2011

У меня есть два файла из программы на Си. Я думаю, что оба принадлежат к одной и той же версии. Используя «diff», я мог знать, где есть различия, которые, вероятно, состоят из 3 строк. Проблема в том, что второй файл был передан другому программисту, который использовал совершенно другую неопределенность, стиль скобок и т. Д., Но, вероятно, изменил только те 3 строки, которые мне нужно найти. Если я использую «diff», я получаю много различий. Итак, мой вопрос: как я мог в этой ситуации знать, где есть различия, с точки зрения кода. Я попытался применить одинаковое форматирование к обоим файлам, а затем использовать «diff», но в моем случае это не работает.

Ответы [ 3 ]

1 голос
/ 24 февраля 2011

Используйте pretty-printer для форматирования обоих файлов, а затем выполните diff.

0 голосов
/ 26 февраля 2011

Вы можете использовать нашу SmartDifferencer программу.Он сравнивает два файла кода, анализируя их с помощью реального синтаксического анализатора (делая его полностью независимым от форматирования и размещения или изменений в комментариях), сравнивая деревья синтаксиса и затем сообщая об изменениях с точки зрения действий редактирования (копировать, перемещать, вставлять, расширять)переменная внутри блока), объясняющая, что произошло.Таким образом, вы видите различия в терминах языковых структур вместо линий, что часто дает гораздо меньшие результаты сравнения.Он даже игнорирует изменения в основаниях числа и экранировании строк, если фактические значения литералов совпадают.

Для таких языков, как C # и Java, это работает очень хорошо.C немного более проблематичен, так как люди пишут оскорбительный код C, который не может быть проанализирован без знания всех определений и #include и т. Д. Таким образом, он не будет обрабатывать некоторые файлы, и вы воспользуетесь обычным diff, возможно, дополненнымформаттер, как предложил другой автор, но он все равно даст вам только различия в строках.C ++, возможно, имеет те же проблемы, что и C, но на практике код C ++ не так оскорбителен.

0 голосов
/ 24 февраля 2011

diff принимает параметр -w, который предписывает игнорировать все пробелы при сравнении строк.Однако, если возможно, что одна строка из одного файла была разбита на две или более строк в другом файле, вам, вероятно, лучше воспользоваться предложением @Jeff Foster.

...