Mercurial. Control e implementación de la versión. Diferentes files de configuration. ¿Cómo?

Tengo una configuration de la siguiente manera.

Un repository privado en bitbucket donde guardo el repository "maestro". Un repository en mi server que actúa como el website 'en vivo'. Un repository en mi computadora portátil que actúa como mi copy de trabajo.

Mi process es el siguiente. Hago un cambio en un file en mi repository local. Los comprometo a nivel local. Impulso estos cambios a bitbucket. Luego retiro estos cambios de mi bitbucket al server web.

Sin embargo, el problema que tengo es que mi copy local utiliza diferentes configuraciones para bases de datos, routes, etc., lo que quiero es que mi file 'config.php' en bitbucket contenga las configuraciones del server y config.php en mi host local para contener la configuration local.

Creo que esto se puede lograr con .hgignore pero no he tenido éxito investigando. El problema que encuentro es que hago mi file de configuration del server, lo presiono a bitbucket, 'olvido' el file en mi repository local, creo un .hgignorar y luego vuelvo a crear el file. Sin embargo, cuando 'olvido' el file que TortoiseHG nota y me pide que confirme el cambio en bitbucket …

Cualquier idea sería muy apreciada. Gracias

Puntos adicionales.

Siguiendo los consejos a continuación, he desarrollado una configuration de la siguiente manera:

Tengo mi repository local en mi computadora portátil donde hago mis ediciones. Tengo bitbucket, que es esencialmente el repository "principal": si otros desarrolladores se unen al equipo, lo clonan. Tengo mi repository en vivo en mi server web.

En mi repository en vivo tengo un file .hgignore que ignora los respectivos files de configuration. Como tal cuando hago hg pull desde mi host, tira del repository como está con los files de configuration de localhost, pero cuando hg update (en la copy de trabajo en vivo), estos files son ignorados / no actualizados.

¿Podría alguien aclarar si lo he entendido correctamente y si esta es una forma adecuada de lograr lo que quiero?

Gracias

.hgignore solo ignora los files si aún no están versionados, por lo que no creo que tu idea en la pregunta funcione.

El enfoque común con respecto a la configuration local generalmente es una variación del mismo tema, como uno de los siguientes:

  1. No verifique en config.php en absoluto. Puede verificar un config.example.php con la configuration más común y documentar en el README que los usuarios tienen que copyrlo a config.php y luego editarlo.

  2. Ponga cualquier configuration compartida en config.php , y agregue una instrucción de inclusión para apuntar a un file no versionado con configuraciones específicas para la máquina, por ejemplo, config.local.php . También puede proporcionar un config.local.example.php -file para esto.

  3. Como 2, pero config.php contiene todas las configuraciones pnetworkingeterminadas y el file local tiene la capacidad de anularlas.

  4. Compruebe en un config.dev.php y config.server.php -file que contiene las configuraciones para ambos entornos, y luego tenga un config.php no versionado que incluye uno de los files anteriores. La ventaja es que las configuraciones mismas están versionadas y puede actualizarlas.

Cuál de estas variaciones escoger, o si haces otra variación, depende de tu entorno.

La idea básica para trabajar con el control de versiones y los diferentes files de configuration es siempre la misma, pero no conozco suficiente PHP como para dar una respuesta detallada de cómo se puede hacer esto en PHP.
Respondí una pregunta similar para .net / Visual Studio hace unos meses, así que simplemente te daré el enlace a esta respuesta y trataré de describir la idea básica nuevamente, pero esta vez, sin tener en count el idioma:

Para su caso de uso, la idea básica es tener dos files de configuration en el repository, uno con sus datos locales y otro con los datos de su server, por ejemplo, como este:

 config.local.php config.server.php 

El config.php "real" no está en el repository, y debe estar en .hgignore , por lo que nunca estará en el repository.

Después de tirar, necesita ejecutar algo que copie uno de estos files (el "correcto" dependiendo del entorno actual, local o server) a config.php .

Y exactamente esta última parte es la parte que no puedo responder en detalle, porque no sé cómo hacer eso en PHP y / o en un server web porque soy un chico de .net / Windows.
Por lo que sé, implementar un sitio PHP es simplemente copyr los files en el server web, por lo que no hay ningún paso de "compilation / compilation" en el que se pueda copyr / renombrar el file de configuration (donde yo lo haría). networking). Corrígeme si estoy equivocado…


EDITAR:

Thomas, no estoy seguro si entendí tus ediciones correctamente. Su repository "local" en su computadora portátil y su repository "activo" en su server web son básicamente clones de su repository "principal" en Bitbucket, ¿correcto?
Si es así, ¿está diciendo que tiene diferentes files .hgignore en los diferentes clones? Esa es la parte que me confunde.
No importa cómo lo haga realmente al final (hay varias posibilidades para tratar con los files de configuration, consulte a continuación), el file .hgignore debe ser el mismo en todos los clones de su repository.

Entonces, todos sus repositorys (sin importar qué clon de qué máquina) deberían contener todos los mismos files de configuration.
Entonces, solo necesita asegurarse de que se usan configuraciones diferentes en diferentes entornos. Ya hay una excelente list de diferentes forms de lograr esto en la respuesta de Lauren Holst , así que solo te señalaré allí.
Como ya dijo Laurens Holst, no podemos decir cuál de estas forms es la mejor para usted, depende de su entorno.

Es posible que desee comprobar aquí . Si tanto el file de configuration como .hgignore están comprometidos, el .hgignorar no tendrá ningún efecto. También puede agregar un control de dominio condicional:

 $domain = $_SERVER['HTTP_HOST']; if ($domain=="localhost") { //local copy config } else if ($domain=="yourdomain.com") { //webserver config }