Incruste la revisión de Git en el ejecutable durante la compilación remota con NetBeans

3 minutos de lectura

Me gustaría incrustar la revisión de Git (SHA1) en mis ejecutables en el momento de la compilación. Puedo hacerlo localmente así:

 git log -1 --format="%h" >version
 objcopy --input binary --output elf64-x86-64 version version.o
 # link version.o into the executable

El problema es que estoy usando NetBeans (en Windows) para construir de forma remota (en Linux). Es un poco paradójico: el comando git parece necesitar ejecutarse en la máquina local (donde está la fuente), pero el comando objcopy debe ejecutarse en el servidor remoto (donde ocurre la compilación). Esto es un problema porque si bien NetBeans me permite editar el Makefile del proyecto para insertar un paso de compilación previa, no puedo averiguar cómo o dónde colocar el comando git para que se ejecute en la máquina local antes de los pasos de compilación remota.

Intenté hacer un proyecto NetBeans separado para ejecutar el comando git en localhost, pensando que luego haría que el proyecto “real” dependiera de eso, pero NetBeans no parece permitirme crear un proyecto que “no haga nada” ( es decir, no tiene archivos fuente y no produce una biblioteca ni un ejecutable; solo generaría el archivo de texto de la versión).

Estoy usando NetBeans 7.3 para C++ con la opción “Copia automática” para compilaciones remotas. Una posible solución podría ser usar el modo NFS/Samba con el repositorio de Git almacenado en el servidor, pero eso sería bastante problemático porque el proyecto tiene varios desarrolladores que usan la copia automática desde hace mucho tiempo. Por lo tanto, sería genial tener una solución para generar algunos archivos localmente en NetBeans antes de iniciar la compilación remota.

Una solución sería tener ese archivo de versión ya actualizado cuando inicie su trabajo de Netbeans.

A gancho posterior a la confirmación podría generar ese archivo en el lugar correcto, para que lo lea su trabajo de Netbean.

  • Gracias por esta idea. El mayor inconveniente que veo ahora es que los ganchos de Git no se publican en el (servidor) remoto, por lo que cada usuario deberá ejecutar un script para configurar los ganchos después de la clonación. Aún así, lo intentaré.

    – John Zwink

    20 de agosto de 2013 a las 0:30

  • @JohnZwinck no: me refiero a configurar ese enlace posterior a la confirmación en el repositorio al que presiona, y que es leído por su trabajo de NetBeans.

    – VoC

    20 de agosto de 2013 a las 5:24

  • Ahora estoy confundido. Necesita actualizar un archivo en el lado del cliente, y si el cliente retira una revisión anterior, la secuencia de comandos debe ejecutarse nuevamente. Por lo tanto, no puede ser un gancho solo en el lado del “servidor” de git. De todos modos, he implementado la idea utilizando ganchos en el lado del cliente que cada usuario debe instalar después de la clonación. Si conoces una forma de evitarlo, me encantaría escucharlo. ¡Gracias de cualquier manera!

    – John Zwink

    20 de agosto de 2013 a las 6:14

  • Así que en su mayoría funciona, pero me encontré con un problema técnico, así que publiqué una pregunta de seguimiento aquí: stackoverflow.com/questions/18393567/…

    – John Zwink

    23 de agosto de 2013 a las 2:11

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad