Я не думаю, что наш метод можно назвать наилучшей практикой, но он хорошо нам послужил.
У нас есть несколько больших баз данных для нашего приложения (20 ГБ +), поэтому поддержка локальных копий на каждом компьютере разработчика никогда не была опцией, и даже если мы не разрабатываем против действующей базы данных, нам нужно заняться разработкой к базе данных, максимально приближенной к реальной.
Как следствие, мы также используем центральный веб-сервер и поддерживаем на нем ветвь разработки нашего транка subversion. Как правило, мы не работаем одновременно с одной и той же частью системы, но когда нам нужно это сделать, или когда кто-то вносит существенные изменения, мы разветвляем ствол и создаем новый виртуальный хост на сервере dev.
У нас также есть проверка кода на производственных серверах, поэтому после того, как мы закончим тестирование, мы просто делаем svn-обновление на рабочих серверах. Мы реализовали скрипт, который выполняет команду обновления на всех серверах, используя ssh. Это очень удобно, поскольку наша кодовая база велика и требует много времени для загрузки. Subversion будет копировать только те файлы, которые действительно были изменены, так что это намного быстрее.
Это очень хорошо сработало для нас, и единственное, на что нужно обратить внимание - это вносить изменения непосредственно на рабочие серверы (что, конечно же, с самого начала запрещено), поскольку это может вызвать конфликты при обновлении.