DVCS, bases de datos y contenido generado por el usuario?

Quiero crear un entorno de desarrollo con mi repository central alojado en algún lugar como bitbucket / github. Luego en mi server de desarrollo y mi server de producción tendré clones.

Trabajaré en nuevas funciones y realizaré confirmaciones locales en el server de desarrollo. Una vez que esté en una etapa en la que pueda pasar a producción, presionaré desde el clon de desarrollo hasta el repository central y luego pasaré del repository central al server de producción.

Todo esto tiene sentido, pero hay dos partes que no puedo entender.

¿Cómo mantener la database y el contenido generado por el usuario (cargas de files, etc.) sincronizados?

Además, ¿se borrará el contenido generado por el usuario cuando realice mi próxima extracción + actualización en el server de producción?

¿Cómo otros abordan esto?

Información adicional: Este será un website de MySQL / PHP. También estoy pensando en usar un framework mvc (probablemente cake) y no he decidido con firmeza qué DVCS usar, pero hasta ahora Mercurial es lo que estoy pensando. No estoy seguro de si esta información importa, pero agregando solo por si acaso.

Es por eso que un DVCS no siempre es la herramienta adecuada para la gestión de lanzamientos : una vez que su código está en el repository remoto del server, debe tener otro mecanismo "rsync" para:

  • extraer la label correcta (la que poner en prod)
  • transformar / copyr los files correctos
  • dejar intacto otro set de files / database.