Создать git-архив поддерева со всеми изменениями в zip

Я пытаюсь создать zip-файл, содержащий все файлы, измененные или зафиксированные, в zip-архив. Причина этого в том, что у нас есть загружаемый пример проекта для клиентов. Когда в примере кода происходят какие-либо изменения, нам необходимо обновить zip-файл, существующий в общедоступном веб-приложении.

Я подумал, что было бы неплохо использовать для этого хук git pre-commit. Однако я новичок в git и не знаю сценариев оболочки. Я получил следующий сценарий предварительной фиксации для создания архива файлов, которые мне нужны, в нужном мне месте:

!C:/Program\ Files/Git/usr/bin/sh.exe

REF_APP_PATH="Source/CodeExamples/DataServiceReferenceApp"

если git diff --cached --name-only | grep --quiet "$REF_APP_PATH", затем

echo "Обновление измененных файлов в DataServiceReferenceApp.zip"

git архив --format=zip --output=Source/WebApi/Api/Downloads/test.zip HEAD:Source/CodeExamples/DataServiceReferenceApp fi

выход 0

Проблема в том, что все файлы взяты из предыдущей фиксации, а не из измененных файлов, которые проверяются. Я хочу заархивировать старые и новые в правильной древовидной структуре, а затем зафиксировать измененные плюс обновленный почтовый индекс.

У кого-нибудь есть идеи, как это сделать?


person KGayda    schedule 10.01.2019    source источник


Ответы (1)


Вместо этого вы должны использовать хук после фиксации, просто переименуйте хук.

После завершения всего процесса фиксации запускается хук post-commit. Он не принимает никаких параметров, но вы можете легко получить последний коммит, запустив git log -1 HEAD. Как правило, этот скрипт используется для уведомления или чего-то подобного.

Когда вы используете хук перед фиксацией, ваши изменения все еще находятся в индексе, а HEAD по-прежнему указывает на последнюю завершенную фиксацию (вы можете получить свои изменения с помощью git diff-index --cached HEAD).

Хук предварительной фиксации запускается первым, еще до того, как вы наберете сообщение о коммите.

person joran    schedule 10.01.2019
comment
Я не понимаю, как это помогает мне архивировать. Мне нужно было бы получить идентификатор коммита, а git log -1 HEAD не возвращает его. - person KGayda; 11.01.2019
comment
Кроме того, я хочу делать архив только в том случае, если файлы изменились. Я не понимаю, как ваше предложение даст мне файлы в конкретной папке, которые изменились с последней фиксацией. Мне не нужна вся фиксация, и я хочу обновить архив только в том случае, если изменились определенные файлы. Я уже пробовал постфиксировать. Я могу создать архив, если буду делать это каждый раз. В конечном итоге это создает новый файл, который необходимо фиксировать после каждой фиксации. Это невозможно. - person KGayda; 11.01.2019