Архив GIT только в том случае, если файлы были изменены в git

#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