2010-12-21 7 views
6

Tengo un archivo en mercurial que quiero que las máquinas dev saquen el archivo, pero quiero que el servidor de implementación NO extraiga el archivo (tiene modificaciones especiales que las máquinas dev no tienen) . ¿Es esto posible, o debería tener una solución personalizada de inserción al servidor en lugar de simplemente hacer un jg pull?Archivo Conditional Mercurial Ignore

Respuesta

6

Una forma típica de hacer esto sería hacer lo siguiente:

se almacena una copia de cada archivo en el repositorio, y nombrarlos correctamente. Por ejemplo, si el archivo en cuestión es web.config, que almacenaría los dos siguientes en el repositorio:

  • web.server.config
  • web.dev.config

continuación, se añade un paso construido para asegurar el archivo correcto se ha copiado en el archivo real web.config, se puede utilizar un archivo por lotes:

if "%COMPUTERNAME%" == "SERVER" copy web.server.config web.config 
if not "%COMPUTERNAME%" == "SERVER" copy web.dev.config web.config 

a continuación, ignoraría web.config sí mismo a través .hgignore:

glob:web.config 
1

¿Es esto algo que se puede resolver fuera del control de la versión? Por ejemplo, incluya el archivo en todas las copias del repositorio, pero habilite o deshabilite su uso con variables de entorno o algo similar. Esto no suena como algo que la mayoría de los sistemas de control de versiones están diseñados para manejar, a menos que utilice hacks desagradables para hacer cosas como agregar/quitar/parchear archivos después de la actualización.

+0

Acepto, pero este archivo es necesario tanto en el servidor como en las máquinas de desarrollo. Es un archivo de configuración con rutas a web urls/cadenas de conexión db/etc, y estos valores son diferentes en el servidor que las máquinas de desarrollo. – Jan

+0

¿Cambian a menudo? –

+0

no muy a menudo. – Jan

1

Una opción es crear un archivo especial hgignore para el servidor de implementación, que podría o no podría ser incluido en el repositorio. Luego, en el archivo hgrc del servidor, especifique la ruta al archivo especial hgignore con la variable ignore.

Esto garantizaría que el servidor de implementación ignorará las actualizaciones del archivo, pero podría actualizarse como siempre para las máquinas de desarrollo.

2

Una variante de la respuesta de Karlsen que uso siempre.

Tengo /config o /etc directorio en el proyecto. Ese directorio contendrá a menudo configuraciones de muestra como:

  • dev.yaml
  • ci_server.yaml

Entonces mis aplicaciones tirar de /etc/app.yaml que es un enlace a la configuración correcta dependiendo del huésped que está siendo ejecutado en.

La mejor manera de hacerlo de esta manera es que no tiene rutas de código variantes (las ramas del script por lotes) que elimina un posible vector de error. Esto le permite ejercer la misma ruta de código que se utilizará en producción (hasta dónde buscar el archivo de modificación).