Git compromete un file de configuration para ser anulado por el usuario

Hay un proyecto de Git que necesita algunas configuraciones locales para build. ¿Es posible que envíe un file? Diga env.config y cualquiera que clone el repository remplaza localmente este file de configuration de acuerdo con sus necesidades. Quiero que Git destrabe cualquier cambio adicional en env.config mientras se compromete.

Podría agregar input a .gitignore pero esto también eliminará la versión pnetworkingeterminada del file del repository.

¿¿Algunas ideas??

Lo habitual que hago en estos casos es agregar env.config.template al repository y el env.config actual a .gitignore. Se supone que cada usuario crea su propio env.config basado en la plantilla.

La otra solución es pedirles a los usuarios que no confirmen sus cambios o incluso evitar compromisos accidentales, incluido el file de configuration en un git-hook. Sin embargo, creo que agregar una plantilla es un poco más limpio: requiere una operación especial (copy) solo una vez y no requiere atención con cada confirmación.

En mi opinión, preferiría agregar el file como un env.config.example o algo así y agregar una input al .gitignore para env.config .

Tienes 3 opciones principales para hacerlo:

  1. .gitignore – Git ignorará el file a partir de ahora en todos los clones que hayas hecho.
  2. assume unchanged : temporalmente ignorará el file localmente en el clon local hasta que se apague.
  3. smudge/clean filters

.gitignore

El problema con esta forma es que una vez que haya conmutado el file al repository, no será ignorado.

Primero debe agregarlo al .gitignore y luego force agregarlo al repository y confirmarlo.


--[no-]assume-unchanged

Si aún desea el file en el repository (como se le solicitó), debe usar el indicador de assume-unchanged en el file rastreado.

https://git-scm.com/docs/git-update-index

Cuando se especifica este indicador, los nombres de los objects registrados para las routes no se actualizan.
En cambio, esta opción establece / desactiva el bit "asumir sin cambios" para las routes.

Cuando el bit "asumir sin cambios" está activado, el usuario promete no cambiar el file y permite que Git suponga que el file del tree de trabajo coincide con lo que está grabado en el índice. Si desea cambiar el file de tree de trabajo, debe deshacer el bit para decirle a Git. Esto a veces es útil cuando se trabaja con un gran proyecto en un sistema de files que tiene una llamada al sistema lstat (2) muy lenta (por ejemplo, cifs).

Git fallará (correctamente) en caso de que necesite modificar este file en el índice, por ejemplo, al fusionarse en una confirmación; por lo tanto, en caso de que el file asumido no rastreado se cambie en sentido ascendente, deberá manejar la situación manualmente.


Smudge/clean

Lea todo al respecto y configúrelo aquí:
https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes

Resulta que puedes escribir tus propios filters para hacer sustituciones en los files en commit / checkout .

Estos se llaman filters clean y smudge .

En el file .gitattributes , puede establecer un filter para routes particulares y luego configurar secuencias de commands que procesarán los files justo antes de que se comprueben ("borrón", consulte la Figura 8-2) y justo antes de que se organicen (" limpiar ", ver Figura 8-3).

Estos filters se pueden configurar para hacer todo tipo de cosas divertidas.

enter image description here

Puede usar git update-index para su caso.

 git update-index --no-assume-unchanged env.config 

Cuando el bit "asumir sin cambios" está activado, git deja de verificar los files del tree de trabajo para posibles modificaciones.