Я использую
git-deliver. Он создает удаленный репозиторий на сервере и атомарно меняет дерево исходников. Можно запускать свои скрипты в разные этапы деплоя. Минус - надо потратить время, чтобы все настроить.
Работает примерно так:
* Делаешь
git deliver
.
* Изменения заливаются в удаленный репозиторий на сервере.
* Выполняются скрипты остановки сервера.
* Меняются исходники на актуальные.
* Выполняются скрипты для запуска сервера.