delphi - handbook - software git
Archivos RES de Delphi y Git (6)
Bienvenido al club. El archivo .res de la aplicación en Delphi es un problema en la zona lumbar para todos los que usan el control de código fuente. Desea usar auto-inc-buildnumber pero estropea su control de fuente. Lo que he hecho es
divide el icono y los recursos de versión como este:
{$ R * _icon.res}
{$ R * ._ version.res}
desactivar autoinc del buildnumber
- agregar un evento de preconstrucción al proyecto que
- incrementa el número de compilación en un archivo .ini correspondiente al proyecto
- genera un archivo .rc con la información de versión del archivo .ini
- compila un archivo .res del archivo .rc
- agregue el archivo * _icon.res al control de fuente, nunca cambia, así que esto es seguro
- agregue el archivo .ini con la información de la versión al control de fuente, es un archivo de texto por lo que es fácil de diferir
La herramienta que he escrito para generar el archivo .res de la versión es software gratuito, disponible aquí y también de SourceForge
Tengo un gran proyecto escrito en Delphi y quiero administrar sus fuentes usando Git. Creé el repositorio de Git, que incluye las fuentes de mi aplicación y los componentes de terceros. Todo eso está construyendo automáticamente usando msbuild
.
El mayor problema son los archivos RES. Algunos de ellos se actualizan cada vez que reconstruyo mi aplicación, otros no. Algunos tienen fuentes * .rc, otros no. No puedo ignorar todos los archivos de res (.gitignore) porque sin recursos mi proyecto no podrá compilarse. Además, no puedo incluir archivos de res: cambian de compilación a compilación, no quiero verlos en diffs.
¿Qué haces con tus archivos * .res en Git? ¿Algún consejo?
Guardo mis archivos RES de proyecto en git (los que coinciden con el nombre del dpr).
Creo que la única razón por la que el archivo RES del proyecto cambiará cada vez que compile es si tiene incrementado el número de compilación establecido, lo que para mí significa que debe mantener las res en control de fuente o no le importa el número de compilación para que pueda debe desactivar esa opción.
También tengo archivos RES que construyo desde RC, que cambian cada compilación, entonces tengo un gitignore para * .res y luego agrego git add -f project.res
para los archivos RES del proyecto
No sé GIT, pero en SVN, simplemente solo "SVN ADD" los pocos que importan, y no los generados automáticamente. Como los archivos no versionados están excluidos de los diffs, eso también se soluciona.
Podrías:
- ignorar todos los archivos
.res
- generar los archivos
.res
que se pueden generar (compilando los recursos de los archivos de script.rc
) - agregue solo los archivos
.rc
sin archivos.rc
para generarlos: si ha especificado en un.gitignore
que deben ser ignorados, entonces agregarlos está bien: no se mostrarán en el archivo diff.
Por definición, los archivos RES son archivos RC compilados. Entonces, idealmente, debe ignorar todos los archivos RES y comprometer solo cambios RC. Si sucedió de alguna manera que usted no tiene una fuente RC para algún archivo RES en particular, entonces agregue solo este archivo RES "huérfano" a git - dichos archivos no deberían cambiar de una compilación a otra (porque no hay un archivo RC para generar ellos desde). Si por alguna extraña razón (Delphi, eh) tales archivos RES cambian, entonces estás condenado.
En pocas palabras: los archivos RES son objetivos de compilación, no diferentes de otros binarios (obj, exe, etc.)
Se recomienda encarecidamente desactivar el "Número de compilación de incremento automático" en la configuración del proyecto, con cualquier tipo de sistema de control de versiones. De esta forma, es ''seguro'' agregar los archivos .res al repositorio.
He estado buscando durante mucho tiempo una forma de actualizar automáticamente el número de compilación en la información de la versión en el archivo .res del proyecto, pero lo mejor es actualizar un .rc adicional con la información de la versión. En la práctica, generalmente actualizo el número de compilación al número actual de revisión de subversión justo antes de la compilación final para una versión de los archivos binarios.