Git pu sh не удаляет удаленные файлы - PullRequest
1 голос
/ 28 января 2020

Я не GIT эксперт и простите, если это неправильный форум для этого, но я использую GIT для развертывания кода на моем производственном сервере, который работает нормально, я просто делаю git push production master где production указывает на мой сервер WPEngine, и он, очевидно, будет копией главной ветви.

Проблема этого подхода заключается в том, что нам нужно включить все, что нужно для работы prod в репо. Сюда входят такие вещи, как dist/ (сгенерированный CSS / JS et c), а также vendor/ (composer установленные сторонние библиотеки), что явно не идеально.

Для борьбы с этим я было (на мой взгляд) простая идея отдельных .gitignore с. Один для origin и один для production. Я настроил это так: у меня обычный .gitignore, а затем у меня есть .prodignore.

Затем я написал простой сценарий оболочки (deploy.sh), который выполняет следующее:

  1. Go через каждый .prodignore файл и переименуйте его .gitignore:

    for prodignore in $(find . -name '.prodignore'); do
        gitignore=$(echo $prodignore | sed 's/prodignore/gitignore/')
        mv $prodignore $gitignore
    done
    
  2. Удалите все файлы из GIT, но сохраните их на диске: git rm -r --cached --quiet . (это касается удаления файлов, которые теперь находятся в новом .gitignore - как src/)

  3. Теперь заново добавьте все файлы с новым .gitignore: git add --all (это касается добавления файлов, которые ранее были в .gitignore - например, dist/)

  4. Commit и pu sh в production remote: git commit --quiet -m 'Sleek Deploy' && git push --quiet --force production master

  5. Наконец go назад один коммит, поэтому мы отменяем все, что мы только что сделали: git reset HEAD~ && git reset --hard HEAD

Это все работает в основном тоже хорошо. Правильные новые файлы помещаются в production, и мой локальный репозиторий, а также origin по-прежнему выглядят хорошо и, насколько я могу судить, не имеют странной истории.

Что означает , а не Однако, работа, которую я только недавно заметил, заключается в том, что если я удаляю файл со своего локального компьютера, pu sh удаляет до origin, а затем развертывает до production, используя описанные выше шаги, удаленный файл не будет удален.

Почему это? Могу ли я что-нибудь сделать, чтобы он был удален? Весь мой подход к этому несовершенен? Imo, имеющий отдельные .gitignore файлы для отдельных пультов, является таким простым решением этой проблемы, но, возможно, я откусил больше, чем могу прожевать.

Стоит отметить, что если я не --force pu sh на шаге 4 пульт сообщает, что мы не в курсе c (что имеет смысл, поскольку у него есть коммит, которого на самом деле больше нигде нет - верно?)

Редактировать: A немного больше информации:

  • Когда я делал git push production master как обычно, а production был копией master, у меня никогда не было этой проблемы

  • Это не имеет отношения к тому, что в .gitignore. Файлы, о которых я говорю, никогда не были ни в .gitignore, ни .prodignore. Я упомянул их только для справочной информации и почему мне нужно сделать коммит на производство, которое никогда не выдвигается к источнику. Это просто происходит, если я:

    1. Создаю любой случайный файл, скажем "test.txt"
    2. Pu sh, файл origin
    3. Pu sh файл в production с помощью описанных выше шагов
    4. Удалить файл
    5. Pu sh Удалить в origin (файл больше не находится в репо)
    6. Pu sh удаление до production с использованием вышеуказанных шагов (файл по какой-то причине все еще на production сервере)

Если я никогда не вытяну sh файл с production для начала, просто с origin, а затем удаляю его, он никогда не закончится на production.

production is насколько мне известно, безупречный репо, если это поможет.

1 Ответ

1 голос
/ 28 января 2020

если удаленный файл находится в новом .gitignore, он определенно не будет удален, так как ваш коммит вообще не будет смотреть на этот файл.

Если это так, и вы все еще хотите, чтобы он был удаленный, вам придется запустить sh в производство, используя ваши исходные файлы .gitignore, а затем продолжить с «гладким развертыванием»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...