Как правильно разворачивать приложения при помощи Git?
Всем доброго времени суток!
На данный момент я использую очень простой вариант деплоя когда на сервере срабатывает хук post-receive и в нем делается git checkout -f branchname
Все меня устраивает, но проблема вот в чем. Если я создаю в проекте файл то при деплое он появляется на сайте, а вот если я делаю в проекте git rm filename то деплой проходит, но файл так и остается на сервере (что логично, мы ведь тупо разворачиваем текущую ветку в директорию). Так вот вопрос - как правильно реализовать деплой чтобы все файлы подконтрольные системой контроля версий добавлялись и удалялись, но при этом директории которые не под контролем системы оставались на сервере (к примеру директория /upload)
Схема такая: на локальной машине ведется интенсивная разработка и готовые результаты мержатся в определенную ветку - потом я делаю push на сервер где срабатывает хук и содержимое этой ветки разоворачивается в директорию с сайтом. Как тут использовать pull я еще не придумал.
Снова возвращаюсь к локальной машине
git rm test.txt
git commit -m "removed test.txt"
git push server master
В итоге на сайте до сих пор доступен файл site.ru/test.txt
Потому что ветка просто развернулась в эту же директорию и возможно даже перезаписала некоторые файлы, но те которых в гите уже нету остались нетронутыми.
Как решить эту проблему?