¿Cómo puedo tener diferentes versiones de un file en el directory de trabajo local, en el directory de trabajo remoto y en el destino de ftp git?

Estoy usando Git para administrar un proyecto CodeIgniter. Trabajo en mi máquina local y me desploop a un server remoto, donde pruebo todo. Luego uso git ftp push para actualizar el sitio de producción en otro host.

Ahora, para que esto funcione, necesito tres files index.php diferentes, uno para cada entorno, donde simplemente establezco una variable de entorno diferente.

Así que tengo que darme el nombre del file index.php, e incluso git-ftp-ignorarlo. Para el ftp está funcionando. Para el gitignore normal no lo es: sigue actualizando el file index.php en el server remoto.

Intenté hacer git rm --cached index.php , pero lo que obtengo es que elimina por completo el file index.php en el server remoto.

¿Qué estoy haciendo mal?

Editar: Parece que no es algo que pueda hacer con git, pero he encontrado una mejor manera de configurar la variable de entorno CodeIgniter .

En primer lugar, el mecanismo de ignorar no tiene ningún efecto en los files que ya están siendo rastreados en el repository. Por lo tanto, si desea que el .gitignore funcione, debe eliminar el file del repository (como lo hizo, con git rm --cached ) pero luego, como observó, se eliminará cuando actualice el repository remoto. .

En resumen, no creo que deba .gitignore el file en esta situación. Hay una sutileza acerca de la semántica de los files ignorados en git que me ha sorprendido varias veces: los files ignorados se consideran desechables , ya que el mecanismo está diseñado para productos de construcción. Lo que tienes aquí es un file que deseas ignorar, pero es precioso, y actualmente Git no tiene una forma de especificarlo.

Por ejemplo, en su situación, si recrea index.php manualmente, parecerá que todo funciona bien, pero luego si usa git checkout old-commit para regresar a una versión anterior donde se rastreó index.php , y luego ir de return a donde estabas antes, con el git checkout - , tu index.php será eliminado!

Le sugiero que cambie su index.php para get la configuration correcta para la variable de entorno de algún otro file que sea:

  1. fuera del repository
  2. o está en el repository, se ignora y en una ruta que nunca se ha rastreado en el repository

Idealmente, también agregue un valor pnetworkingeterminado para cuando ese otro file no exista.

Esta es una vieja pregunta, pero hago esto también y he tenido problemas en el pasado.

Lo que está sucediendo es que, dado que index.php no estaba originalmente en su .gitignore, index.php está siendo rastreado por todos sus repositorys.

Cuando actualizó .gitignore en su sitio de desarrollo y lo eliminó de su repository, lo que hace es pasar el "index.php eliminado" a su sitio de producción. Si su sitio de producción todavía no tiene index.php en ITS .gitignore, "borrará" index.php como debería.

Lo que tienes que hacer es asegurarte de agregar index.php a cada .gitignore en cada twig de cada repository. ENTONCES puede usar rm – cached y todo funcionará como se espera.