¿Cómo puedo fusionar en Git sin cambiar los files de configuration en el maestro?

Tenemos una serie de files de configuration que contienen información, como una url, que debe modificarse para nuestro entorno de desarrollador. Creamos el entorno de desarrollador como una twig en git, y realizamos los cambios a los files de configuration. El problema es que cuando unimos la twig de desarrollo a la twig principal, cambia los files de configuration en la twig maestra.

Nos gustaría almacenar los files en git, por lo que no creo que podamos usar .gitignore. Necesitamos mantener toda nuestra fuente en el repository ya que estamos usando beanstalk elástico, y necesitamos implementar toda la fuente cada vez.

Hemos tratado de usar .gitattributes, y leímos muchas de las publicaciones, como ¿Cómo le digo a git que siempre select mi versión local para las fusiones en conflicto en un file específico? , pero parece que el controller de combinación que configuró en .gitattributes solo se invocará si hay un cambio en ambos files. En nuestro caso, no cambiaremos los files de configuration en la twig principal, por lo que nunca se llamará al controller de combinación.

¿Hay una manera fácil de hacer esto sin escribir un script?

La solución es simple: no comprometer el file de configuration.

Crea un file de configuration de plantilla y confírmalo. Al instalar su aplicación, copie la plantilla y cambie lo que necesita cambiar. Mantenga el file de configuration real en .gitignore para evitar confirmaciones accidentales.

El uso avanzado consiste en crear dos files de configuration: valores pnetworkingeterminados de aplicación y sobrescrituras locales. Los valores pnetworkingeterminados se confirman, las anulaciones locales no se confirman. El beneficio de este enfoque es que reemplaza solo lo que necesita y deja los otros valores no especificados, por lo que cuando cambia el valor pnetworkingeterminado, no tiene que actualizar su configuration de sobrescritura local. Lo malo es que tiene que cargar y fusionar dos files de configuration durante la initialization de su aplicación.

Después de investigar una serie de commands de git como rebase y fetch, encontré una forma sencilla de hacerlo. Simplemente cree la twig como huérfano, copie los files de configuration en ella y use el command "git checkout configs_branch -." Para copyr esencialmente los files de configuration a la twig padre.

Entonces en detalle:

inicializar el git repo con la URL del repository

git remote add origen (url de repository remoto)

asegúrese de estar en la twig de la que desea crear la twig

crea la twig que contendrá los files de configuration como una twig huérfana para que la twig no contenga toda tu fuente

git checkout –orphan configs_branch

Copie los files de configuration a esta twig del repository agregue los files, confirme y presione

Git agregar.

Git commit -m "confirmación inicial con files de configuration"

git push origen configs_url

DESPUÉS DE UNA FUSIÓN EXITOSA

de la sucursal padre

git checkout parentbranchname

git fetch –todos

copie los files de la twig config a la twig padre

git checkout configs_branch -.

(Aún estará en la twig principal después del command anterior)

cometer los files

git commit -m "restablecer los files de configuration"

Gracias @vampire por tu ayuda!

Usted solicitó soluciones sin la necesidad de escribir un script. Mi solución incluye scripts. Sin embargo, ya están escritos.

1) Cree un controller de combinación personalizado que ignorará los conflictos de combinación para el file respectivo. El controller debe estar registrado para cada file en .gitattributes

2) Cree conflictos de combinación en cada confirmación en ese file (de lo contrario, la fusión es trivial y no se usará el controller de fusión). Esto se puede hacer con un enganche post-commit en .git / hooks / post-commit que cambia ese file en cada twig después de cada commit.

Combiné eso en algunos guiones: https://github.com/keepitfree/faithfulgit