Конечно. Чтобы выполнить какое-либо действие, когда кто-то толкает, создайте post-receive
hook . Чтобы перенести эти изменения из чистого репозитория в другой каталог (который не является репозиторием Git), вам нужно будет создать git archive
и развернуть его в том месте, которое вы хотите обновить.
Хук post-receive
получает на стандартный ввод список всех ссылок, которые были обновлены нажатием, а также их старые и новые значения, в следующем формате (где SP
- символ пробела, <old-value>
и <new-value>
- это исправления, а <ref-name>
- это ссылка, которая была обновлена):
<old-value> SP <new-value> SP <ref-name>
Если вас интересует только зеркальное отображение master
в вашем каталоге назначения, вы захотите выполнить свой скрипт, только если увидите такую строку.
Например, что-то подобное может сработать (не проверено, поэтому проверьте это в месте, которое вас не волнует, прежде чем доверять ему):
#!/bin/sh
while read old new ref; do
if [ "$ref" = master ]; then
git archive master | tar -x -C /path/to/expand/into
fi
done
edit : обратите внимание, что это имеет довольно серьезный недостаток; если вы удалите (или переместите) файл, он не будет удален в каталоге назначения. Одним из возможных решений было бы добавить rm -rf /path/to/expand/into; mkdir /path/to/expand/into
перед строкой архива.