Delphi RES файлы и Git - PullRequest
       23

Delphi RES файлы и Git

23 голосов
/ 24 февраля 2010

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

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

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

Ответы [ 6 ]

15 голосов
/ 24 февраля 2010

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

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

    {$ R * _icon.res}

    {$ R * ._ version.res}

  • отключить автоматическое включение номера сборки

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

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

9 голосов
/ 24 февраля 2010

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

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

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

2 голосов
/ 24 февраля 2010

Настоятельно рекомендуется отключить «Номер сборки автоинкремента» в настройках проекта с любой системой контроля версий.Таким образом, можно безопасно добавлять файлы .res в хранилище.

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

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...