Использую phpStorm, и bitbucket для хранения кода в приватном репозитарии.
Работаю так:
Есть два FTP: боевой (VPS) и тестовый (VDS)
В phpStrom два проекта "Имя_проекта Dev" и "Имя_проекта Prod" у каждого настроен RemoteHost на соответствующий FTP. Для каждого проекта подключен удаленный git репозитария на bitbucket.
Вся разработка ведется на тестовом фтп, после чего делается Push в ветку dev удаленного репозитария.
После чего в Production проекте Pull в локальную dev ветку, заливка изменений на Production FTP (Ctrl+s в phpStrom), тестирование (ручное), merge её с master веткой и Push в удаленный репозиторий уже в master ветку.