¿Cómo usar el control de versiones en un server de desarrollo remoto?

Estoy en un pequeño equipo de desarrolladores y diseñadores, desarrollo de aplicaciones web y ahora decidimos comenzar a usar el control de versiones. Tenemos un server de desarrollo principal donde se almacenan todos los proyectos y trabajamos en ellos a través de ftp (pero tenemos acceso ssh).

La pregunta es, ¿cuál es la mejor manera de actualizar los files en un server después de que alguien lo haya confirmado, para que todos los cambios se puedan ver al instante en un browser? Hasta donde yo sé, un repository de git debe estar 'desnudo' para poder recibir push, y dado que está 'vacío' – no tiene files de trabajo. ¿Eso significa que el git no sirve para eso o hay un path?

En Mercurial push, la confirmación debe aplicarse localmente para que los files cambien. ¿Debería hacerse a través de algún tipo de gancho?

Y realmente no sé cómo se comporta svn en esta situación, nunca lo usé.

La solución debe ser fácil de usar y compatible con los clientes de GUI.

Busque "ganchos", que son scripts llamados por su software de control de versiones cuando ocurren algunos events específicos, como cuando un set de cambios ha sido extraído en el repository. Esa característica está disponible en SVN, GIT, Mercurial, Bazar …

Actualmente tengo un enlace en un repository central mercurial que contiene un website WIP: cuando alguien del equipo impulsa sus cambios allí, una versión de testing del website se actualiza automáticamente mediante el script hook. Luego, cuando estamos satisfechos con una versión, usamos otra secuencia de commands para mover esta versión al website beta, que algunos usuarios podrán verificar.

No es necesario que un tree funcione para tener acceso web a su repository. Ver documentos en GitWeb .