Git -clone и post-checkout hook
В соответствии с руководством крюк post-checkout
запускается после git checkout
(как и ожидалось), но также после git clone
(если вы не пройдете --no-checkout
).
Хорошо, теперь, учитывая следующее:
- у вас нет локального репозитория до
git clone
- крючки не синхронизируются между пультами
Захваты
-
, хранящиеся в каталоге настраиваемых шаблонов, используемые с --template
, копируются неисполняемыми и поэтому не выполняются после git clone
(это на самом деле не так, как указано в его ответе Джефрими, но крюк все еще не выполнен)
Кажется невозможным, что за post-checkout
выполняется post-checkout
. Тем не менее, справочная страница githooks
в http://git-scm.com/docs/githooks явно указывает способ избежать ее выполнения, а также параметры, переданные в случае ее выполнения, который указывает, что возможно выполнить пользовательский крючок после git-clone
.
Итак, как это возможно? Я, очевидно, что-то пропустил.
Выключает
Ответы
Ответ 1
Я предполагаю, что вы можете создать пользовательскую установку - переименуйте крючки в .../share/git-core/templates/hooks
, чтобы удалить суффикс .sample
.
Вы также можете создать каталог шаблонов, полный символических ссылок, в каталог hooks внутри репозитория (например, post-checkout -> ../../hooks/post-checkout
). Тогда, если клонированное репо содержало этот конкретный крючок, оно получило бы выполнение.
Вы правы, однако в большинстве случаев этого не произойдет.
Изменить: я только что протестировал его, и параметр --template
, похоже, сохраняет разрешения, так что гораздо более простой способ сделать это. Что вы видите, чтобы указать, что он разделил этот бит?
Последнее слово в версиях: вы просматриваете документацию онлайн для более новой версии git, чем вы используете. Эта функция была добавлена в dfa7a6c (клон: запустить после проверки крюк при проверке); git описать говорит, что это не было включено до v1.6.2-rc2.
Ответ 2
В документации githooks:
Когда выполняется git -init, несколько примеров крючков копируются в каталог hooks
нового репозитория, но по умолчанию все они отключены. Чтобы включить hook, переименуйте его, удалив его суффикс .sample
.
Эта инициализация происходит как часть создания клона-заметки для вызова init_db
в builtin-clone.c
.
Например:
$ cat /tmp/my-git-template/hooks/post-checkout
#! /bin/bash
echo "Hello from $0"
$ git clone --template=/tmp/my-git-template file:///tmp/repo.git my-clone
Initialized empty Git repository in /tmp/my-clone/.git/
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Hello from .git/hooks/post-checkout