Cette question est en fait une question sur les procédures (et les outils) de libération, plutôt que sur l'administration du système, mais voici ma meilleure réponse :
Toute version récente de Subversion prend parfaitement en charge vos besoins de gestion de configuration, mais, comme Peter l'a dit, ce n'est pas un outil de déploiement. Une option serait d'intégrer le déploiement dans votre infrastructure de construction régulière (par exemple 'make deploy') et de gérer vos règles de déploiement avec votre code.
Du point de vue de la gestion de la configuration, vous devez garder la trace de tout ce dont votre application a besoin pour fonctionner, y compris le code, les bibliothèques externes (dans des versions spécifiques), le serveur web, les versions du système d'exploitation, etc. make deploy doit s'assurer que tous ces éléments existent avant de tenter de déployer une nouvelle version.
Des outils comme Hudson peuvent également gérer le déploiement pour vous, mais vous devrez toujours lui dire ce qu'il doit faire et je préfère simplement garder mes procédures de gestion de la configuration aussi simples que possible. Un exemple serait de laisser Hudson invoquer "make deploy" mais de ne stocker aucune autre information dans Hudson que vous auriez besoin de récupérer pour la recréer sur d'autres machines.
À quelle fréquence allez-vous faire des versions qui doivent être déployées ? J'envisagerais quelque chose du type taguer votre application web dans tags/ et avoir un mécanisme post-commit qui sait que tags/webapp-1.0.4 doit être exporté vers votre webroot. Si votre application web est grande, considérez que le hook dépose un fichier spécial dans /tmp qu'un cronjob vérifie toutes les minutes et prend les mesures appropriées.
Si vous souhaitez une réponse plus détaillée, veuillez préciser votre calendrier de publication, la taille de votre base de code, le choix du langage, l'environnement du système d'exploitation et les dépendances.