Подтвердить что ты не робот

Файлы Delphi RES и Git

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

Самая большая проблема - файлы RES. Некоторые из них обновляются каждый раз, когда я перестраиваю приложение, а некоторые - нет. У некоторых есть источники *.rc, некоторые - нет. Я не могу игнорировать все файлы res (.gitignore), потому что без ресурсов мой проект не сможет построить. Кроме того, я не могу включить файлы res - они меняются от сборки к сборке, я не хочу видеть их в diff.

Что вы делаете с файлами *.res в Git? Любые советы?

4b9b3361

Ответ 1

Я сохраняю файлы проекта RES в git (те, которые соответствуют имени dpr).

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

У меня также есть файлы RES, которые я создаю из RC, которые меняют каждый компилятор, поэтому у меня есть gitignore для *.res, а затем добавляю git add -f project.res для файлов RES RES проекта

Ответ 2

Добро пожаловать в клуб. Файл приложения .res в Delphi - это боль в нижней части спины для всех, кто использует контроль источника. Вы хотите использовать auto-inc-buildnumber, но это испортит ваш источник контроля. Я сделал это

  • разделите значок и ресурсы версии следующим образом:

    {$ R * _icon.res}

    {$ R *._ version.res}

  • отключить auto inc для номера сборки

  • добавить в проект событие предварительной сборки, которое
    • увеличивает номер сборки в файле .ini, соответствующем проекту
    • создает файл .rc с информацией о версии из файла .ini
    • компилирует файл .res из файла .rc
  • добавьте файл * _icon.res в исходный элемент управления, он никогда не изменяется, поэтому это безопасно
  • добавьте файл .ini с информацией о версии в исходный элемент управления, это текстовый файл, поэтому легко выполнить diff

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

Ответ 3

Настоятельно рекомендуется отключить "Auto increment build number" в настройках проекта, с любой системой управления версиями. Таким образом, "безопасно" добавлять файлы .res в репозиторий.

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

Ответ 4

По определению, файлы RES являются скомпилированными RC файлами. Поэтому в идеале вы должны игнорировать все файлы RES и фиксировать только изменения RC. Если это так или иначе, что у вас нет источника RC для какого-либо конкретного файла RES, добавьте только этот "сиротский" файл RES на git - такие файлы не должны меняться от сборки к сборке (потому что нет файла RC для их генерации). Если по каким-то странным причинам (Delphi, huh) такие файлы RES могут измениться, то вы обречены.

Итог: файлы RES - это цели компиляции - ничем не отличаются от других двоичных файлов (obj, exe и т.д.)

Ответ 5

Я не знаю GIT, но под SVN я просто просто "SVN ADD" мало что имеет значение, а не автоматически сгенерированные. Так как неверсивные файлы исключаются из diffs, это также устраняет.

Ответ 6

Не могли бы вы:

  • игнорировать все .res файлы
  • сгенерировать файлы .res, которые могут быть сгенерированы (компиляция ресурсов script .rc).
  • добавьте только файлы .res без файлов .rc, чтобы сгенерировать их: если вы указали в .gitignore, что их следует игнорировать, то добавление их в порядке: они не будут отображаться в diff.