IDE генерирует вызовы макросов USEFORM, меняющие их порядок
У нас есть проект C++Builder XE (приложение VCL Forms), в котором содержится несколько десятков форм и модулей. Всякий раз, когда файл, принадлежащий проекту, добавляется, удаляется или переименовывается, среда IDE должна выполнять две вещи:
- Вызов макроса USEFORM добавляется или изменяется в исходном файле проекта (ProjectName.cpp), если затронутый модуль представляет собой форму или фрейм
- Элемент CppCompile в файле проекта (ProjectName.cbproj) добавляется или изменяется
Однако вместо того, чтобы просто вносить необходимые изменения, среда IDE перетасовывает некоторые из существующих записей USEFORM и CppCompile, даже если они не затрагиваются изменениями. Если я добавлю модуль (cpp и заголовочный файл), USEFORM будут перетасованы, даже если для этого не потребуется вносить какие-либо изменения в исходный код проекта, только в файл cbproj.
Я не вижу конкретной картины того, как формируется новый заказ. Если я редактирую или переименовываю один блок, примерно половина USEFORM, кажется, меняет положение и только пару или ни одной из записей CppCompile. Если в копию проекта вносятся изменения на двух разных машинах, большинство изменений, похоже, похожи, но не все. Это указывает на то, что переупорядочение не является случайным.
Такое поведение вызывает проблемы при использовании Subversion для слияния изменений, поскольку вынуждает вручную разрешать конфликты, вызванные изменяющимся порядком.
Таким образом, вопрос: что может быть причиной вышеизложенного поведения и как от него избавиться?
1 ответ
Я не смог найти правильного решения проблемы, но вот простой способ сделать его немного менее раздражающим:
Принять политику никогда не вносить случайные изменения, сгенерированные IDE, в репозиторий управления версиями. Всякий раз, когда вы вносите изменения в код, который вызывает смешивание файлов, отмените все ненужные изменения в ProjectName.cpp
а также ProjectName.cbproj
, На этом этапе все еще довольно легко, поскольку вы знаете, какие части файлов действительно должны были измениться. Таким образом, ручной труд выполняется, когда он все еще требует минимального объема работы. Кроме того, работа должна выполняться только один раз, в отличие от того, чтобы оставить изменения без изменений, и в этом случае работа должна повторяться каждый раз, когда кто-то объединяет изменения.