Это не обязательно проблема Git, но проблема в том, как вы копируете файлы. Если вы используете простую команду cp
, она не удалит файлы, которые были удалены в исходной папке, она просто скопирует все новые или обновленные файлы. В вашем целевом каталоге по-прежнему будут файлы, которые были удалены в исходной папке.
Вот два способа получения этой работы:
Вариант 1: Переименовать целевой каталог
Вы в основном копировать файлы из репозитория Git в новый пустой каталог. Затем удалить предыдущую целевую папку и переименовать новую папку в общей папке:
cp -r git_repo/* temp
rm -rf public
mv temp public
Это позволит сделать полный разрыв, так как вы переключаетесь каталогов с помощью команды mv
. На этом этапе новая папка станет активной. Вы можете столкнуться с проблемами, если процесс сохраняет ссылки на файлы в старой папке.
Вариант 2: Rsync
Вместо того, чтобы использовать команду cp
, вы можете использовать что-то вроде rsync
, который позволит вам копировать изменения, а также удалить файлы, которые больше не существуют. Проверьте страницу rsync
людей для получения дополнительной информации и примеров: http://linux.die.net/man/1/rsync
Вот пример, чтобы вы начали:
rsync -avrKL --progress -d --delete-excluded --exclude=.git git_repo/ public/
Одним из преимуществ rsync
является то, что это довольно эффективным - он не будет копировать любые неизмененные файлы , Как только вы выполните первый запуск, он будет копировать только изменения, новые файлы или удалять удаленные файлы, все остальное останется в покое.
Дополнительным преимуществом rsync
является то, что вы можете настроить то, что он копирует, используя переключатели --exlude
. Аналогичным образом вы можете использовать коммутаторы --include
с шаблонами подстановочных знаков.
Чтобы убедиться, что файлы, удаленные в исходной папке, удалены из целевой папки, обязательно используйте косую черту в конце исходной папки в командной строке rsync
. Это сообщит rsync
для синхронизации всей папки.