¿Cómo puedo .gitignore y eliminar un file ya comprometido sin afectar otras copys de trabajo?

Tengo un repository desnudo y dos copys de trabajo, una en mi máquina y la otra en el server.
Resultó que tengo que .gitignore cierto file que debe ser específico para cada máquina. Vamos a llamarlo ' settings.py '. Este file ya está comprometido.

Puse ' settings.py ' en .gitignore para ignorarlo. Cuando ahora cambio el file en mi máquina, el estado de git todavía me dice

 modified: settings.py 

Descubrí que tengo que eliminar settings.py de esta manera:

 git rm --cached settings.py 

Luego git add . , seguido de git commit .

Pero cuando ahora paso esto al repository desnudo y lo traigo a la copy de trabajo en el server, settings.py se elimina allí, lo cual es malo porque tengo que mantener esta settings.py específica.py.

Pensé que podría hacer una copy de settings.py y volver a ponerla una vez que se elimine, pero creo que tiene que haber una forma mejor de hacerlo.

Puedes decirle a git que ignore por completo los cambios a los files rastreados sin tener que eliminarlos. Use este command:

 git update-index --assume-unchanged [FILENAME] 

Luego, si desea rastrear el file más tarde:

 git update-index --no-assume-unchanged [FILENAME] 

¿Podría preferir mantener settings.py eliminado de forma permanente (tanto localmente como a distancia), y:

  • versión un file setting_remote para el lado remoto
  • version a setting_local file para el lado local (es decir, con configuraciones locales específicas)
  • agregue un controller de filter capaz de rebuild el file settings.py correcto al finalizar la compra.

texto alternativo

De esta forma, settings.py se mantiene como "privado" (sin versión). Pero los valores específicos para cada entorno están versionados, cada uno configurado en su propio file, sin ningún problema de fusión.