Manejo de la firma de código en un entorno de origen controlado

8

Solo una pregunta rápida, con suerte:

Mi equipo mantiene una pieza de software que utiliza la implementación ClickOnce y está firmada con un certificado. Mantenemos el certificado público que realmente se usa en una máquina separada que solo se usa para firmar. Eso funciona bien

Sin embargo, cuando ocasionalmente nos encontramos con problemas, es cuando alguien tiene que firmarlo localmente con un nuevo certificado de prueba para poder construir y probar la solución. Inevitablemente, esta nueva huella digital de certificado se transfiere al control de versiones como parte del archivo de configuración del proyecto. No causa un problema en el cuadro de firma, ya que sus propias configuraciones de certificado nunca se envían al servidor Git, por lo que las extracciones de esa máquina no anulan los cambios locales. Sin embargo, causa problemas para todos los demás, ya que tienen su propio certificado de prueba que se utiliza en su máquina local.

¿Hay una manera correcta de manejar esta situación? ¿Tal vez de alguna manera en Git para excluir cambios de solo una parte particular de un archivo de configuración, en lugar de todo?

Locke
fuente

Respuestas:

9

No hay forma en Git de excluir cambios a solo parte de un archivo. Sin embargo, lo que generalmente puede hacer es externalizar esa parte del archivo a un archivo de configuración diferente y luego agregar ese otro archivo de configuración al archivo .gitignore. Eso permite que cada desarrollador personalice la configuración según lo requiera, pero les impide comprobar accidentalmente sus cambios y afectar a otros.

La forma en que haces esto obviamente varía según el idioma / marco. Como mencionas ClickOnce, voy a asumir que es una solución .Net en este caso. Digamos que tienes un web.config con el siguiente contenido

<signingInfo>
  <certificate path="C:\test\whatever.cert">
</signingInfo>

Puedes reemplazar esto con

<signingInfo configSource="signing.config">

"sign.config" se agrega al archivo .gitignore. Luego, cada desarrollador configura sign.config como lo necesitan localmente y no hay necesidad de recordar explícitamente que no debe realizar cambios.

Ruaidhrí Primrose
fuente
De veras me gusta esta idea. Es simple y elegante. ¿Sabe si hay una manera de hacer esto cuando los datos de configuración están en el archivo del proyecto (como .csproj o .vbproj)? Lo busco en Google actualmente, sin embargo, sigo obteniendo resultados en clases parciales, en lugar de archivos de configuración parciales.
Locke
1
No lo he probado personalmente, pero debería poder usar un elemento <Import Project = ""> en su archivo de proyecto principal y señalarlo a otro archivo de proyecto que contenga la configuración específica de su desarrollador.
Ruaidhrí Primrose
Agradable. Cuatro años trabajando con .NET y nunca supe que eso era posible. Voy a tratar de salir. ¡Gracias!
Locke