Подходящий инструмент для слияния исходного кода C?

В настоящее время я работаю над программой, которая обновляет исходный код большой программы. Моя программа написана на Java, а исходный код, который нужно обновить, написан на C, а исходный исходный код изменен, поэтому невозможно просто заменить старую версию версией, которая выходит, потому что измененный код исчезнет.

Итак, я понял, что необходимо обновить старую модифицированную версию с изменениями между старой исходной версией и новой исходной версией. На основе различий между двумя версиями следует создать исправление и применить его к старой модифицированной версии, что, как мы надеемся, приведет к обновленной версии с измененным исходным кодом. Я попытался сделать небольшую блок-схему, чтобы было понятнее.

https://i.stack.imgur.com/og0kI.png

Для моей программы необходимо только найти различия между исходниками .c и .h.

И вот я ищу подходящий инструмент, чтобы найти отличия между новой версией программы и старой версией с оригинальным исходным кодом, сохранить отличия и применить их к старой, модифицированной версии.

В настоящее время я экспериментирую с java-версией инструмента diff-match-patch (http://code.google.com/p/google-diff-match-patch/), который изначально был разработан для обычного текста. Он находит различия между файлами красивыми и простыми, а также дает возможность отображать их как простую HTML-страницу. Но, похоже, есть некоторые проблемы с объединением кода позже, в основном потому, что он изначально предназначен для открытого текста.

Я также пытался использовать git, но я не очень разбираюсь в этом, и я просто посмотрел, как объединить два отдельных файла прямо здесь (запустить алгоритм git merge на двух отдельных файлах), объединяя старую, модифицированную версию с новой версией, используя старую исходную версию в качестве общего предка. Это команда, которую я использовал:

git merge-file -p <current> <common> <other> > <dest>

git merge-file -p old_mod old_original new_original > new_mod

Но, к сожалению, результат был еще хуже, чем раньше. В заключение я ищу инструмент, основанный на командной строке или исполняемый из инструмента Java, чтобы найти различия между файлами и применить различия к другому файлу, максимально разрешая конфликты. Модифицированная версия отличается от исходной версии форматом и добавленными кодовыми блоками в некоторых файлах.

Я также открыт для предложений и альтернативных подходов, как обновить эту модифицированную программу с изменениями нового выпуска программы.

Программа обновления будет запускаться на ПК с Windows, поэтому используемые инструменты должны быть доступны там.


person Daniel Federschmidt    schedule 25.03.2014    source источник