Вариантов множество и выбрать можно только зная специфику конкретного проекта. Кроме того, нет предела совершенству и есть очеь много нюансов с которыми можно мириться в одних случаях и нельзя в других.
Так что не зная проектов нельзя сказать правильно ли вы что-то поняли или нет. По этому я попробую ответить на озвученные вопросы, но полной картины не предоставлю.
Разработка
Разработчики могут проверять свой код либо, как вы сказали, на своих компьютерах - тогда нужно, чтобы разработчик мог запустить копию системы на своем компьютере.
Могут, так же, использовать один тестовый сервер, с которым будут синхронизировать свой исходный код в процессе работы. Это можно делать с помощью rsync или winscp или чего-нибудь еще. Можно для каждого разработчика использовать отдельный поддомен vasya.develop.com, либо отдельную папку develop.com/vasya/
Тестирование
Поскольку в одном "билде" может быть несколько разных задач, то есть слито несколько веток - нужно протестировать их все вместе. Для этого нужно после слияния поместить этот код куда-то уже для тестирования (например, test.develop.com или develop.com/test/). Какие-то правки вносить нужно уже в ту ветку, в которую были слиты эти изменения. Тут уже все зависит от того, как вы это организовываете в git. Когда все протестировано можно деплоить код на продакшн.
Заливать код можно как вы сказали, через ftp/sftp, либо можно при пуше в определенную ветку в центральном репозитории разворачивать копию на тестовом сервере. Например, при пуше в ветку test - на сервере develop.com делается fetch и в папку develop.com/test/ выгружается текущее состояние ветки test. Ну, это все в общих чертах - нужно еще решить, как и откуда будут переноситься настройки, специфичные для отдельного экземпляра системы, если они есть с какой БД этот экземпляр будет работать и т.п.
БД
Все зависит от того, как именно вы ее используете и как осуществляете деплой. Могу порекомендовать держать структуру базы и "системные" данные в каком-либо виде в репозитории. Чтобы можно было развернуть "пустую" базу данных только на основании данных в репозитории. Например, можно просто хранить там скрипты по созданию таблиц с нужной структурой и по заполнению какими-то системными данными. Когда вносятся какие-то изменения в структуру - нужно их, соответственно, сделать и в репозитории. Вообще, перенос изменений в базе данных это отдельный большой вопрос - погуглите "миграция базы данных".