#git #rsync #git-archive
Вопрос:
Мы используем архив git для развертывания сценариев на сервере перехода, который использует rsync для развертывания этих файлов на целевых машинах. Архив git cronjob запускается каждые 24 часа, и файлы, которые являются архивом git, каждый раз получают новую дату создания на сервере jump. Rsync теперь синхронизирует все эти файлы, которые на самом деле не изменились. Есть ли какой-либо способ сообщить архиву git, чтобы он не заменял файлы на сервере перехода, если файл не был изменен в git?
Комментарии:
1. Запишите идентификатор фиксации при запуске
git archive
. Запускайтеgit archive
в следующий раз только в том случае, если идентификатор фиксации изменился.
Ответ №1:
Вы можете передать список файлов в git archive
:
git archive -o ../myarchive.tgz -- path/to/file1 path/to/file2
Вы можете объединить это с git diff --name-only
:
# - diff-filter=AM: list only Added or Modified files (not Deleted ones)
# - --no-renames: turn off rename detection, you don't want to overlook files that are flagged
# as renamed or copied
git archive ... -- $(git diff --no-renames --diff-filter=AM --name-only [previouscommit] HEAD)
Обратите внимание, что это будет включать только созданные и измененные файлы, если вам также нужно удалить файлы, вам потребуется дополнительный шаг удаления :
# delete files listed in :
git diff --no-renames --diff-filter=D --name-only [previouscommit] HEAD