Определенно есть много способов сделать это, но вот мои 2 цента от того, как я работал в последнее время.
Во-первых, я бы, вероятно, избегал сервера dev как такового, потому что, если у вас более 1 разработчика, каждый разработчик может попытаться обновить сервер dev конфликтующим кодом или, если они работают в похожих областях, перезаписать некоторые из них. ваш тестовый код, поскольку вы оба, вероятно, работаете из одной ветви, но оба изменили код и еще не выдвинули изменения.
При этом вам может потребоваться сервер dev, который очень похож на ваш работающий сервер, чтобы после того, как вы и некоторые другие ваши разработчики внесли ряд изменений, вы можете протестировать их на сервере dev перед обновлением кода на живом сервере. сервер.
В моей среде я занимаюсь разработкой под Linux и использую Apache / PHP с теми же версиями и конфигурациями, что и на живом сервере. Таким образом, я клонирую мое git-репо, настроив свою среду так, чтобы мой корневой каталог документов был «публичным» каталогом моего git-репо (например, htdocs). В этом случае у нас есть dev-сервер MySQL, который обычно используется совместно, а не на локальной машине, но вы можете делать все, что проще. Наша система зависит от постоянно обновляемых данных с месторождений, поэтому в общей базе данных у нас есть система, которая автоматически добавляет много необходимых «тестовых» данных в базу данных.
Таким образом, я могу получить последний код из git, работать над всем, что я хочу, работать-прерывать-исправлять-работать-работать-работать и т.д. git для других разработчиков.
Когда вы будете готовы к выпуску, вы можете провести все свои тесты и прочее на сервере разработки, убедиться, что это хорошо, а затем перейти к работе.
В моем случае для обновления «живого» сервера за это отвечает один человек, и я использую rsync для синхронизации моего локального рабочего каталога с живым сервером. Поэтому, когда я абсолютно уверен, что мы готовы к развертыванию, я извлекаю самый последний код из git и запускаю свой скрипт, который rsyncs моего каталога git на сервер.
Я бы отказался от ваших методов 1 и 2 и пошел бы с чем-то вроде 3. Это, вероятно, будет самым разумным для вас делом и простым в управлении. В зависимости от того, на что похожа ваша команда, вы можете создать предустановленную виртуальную машину со всеми зависимостями, правильным программным обеспечением и инструментами разработки, которые вы все используете, или оставить на усмотрение разработчика настройку.
Пока что этот метод очень хорошо работал для меня и других в моей команде.