Git: Может ли голое репо отследить какое-то другое не-git место? Если так, то как? - PullRequest
0 голосов
/ 12 марта 2012

У меня есть голый репо, который получает только толчки.Когда такие толчки сделаны, я бы хотел, чтобы эти изменения отражались голым репо в другом месте (не в клоне, а в статическом месте без папки .git).

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Конечно. Чтобы выполнить какое-либо действие, когда кто-то толкает, создайте 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 перед строкой архива.

0 голосов
/ 12 марта 2012

Согласен с Брайаном.Но каков вариант использования?Почему вы не хотите делать клон, если хотите отслеживать изменения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...