Git-Clone и крюк после проверки
Согласно инструкции, post-checkout
крюк запускается после git checkout
(как и ожидалось), но и после git clone
(если вы не пройдете --no-checkout
).
Очень хорошо, теперь, учитывая следующее:
- у вас нет локального хранилища до
git clone
- хуки не синхронизируются между пультами
-
хуки, хранящиеся в каталоге пользовательских шаблонов, используемых с--template
копируются неисполняемыми и поэтому не выполняются послеgit clone
(на самом деле это не так, как сказал Джефроми в своем ответе, но ловушка все еще не выполнена)
Кажется невозможным, чтобы post-checkout
крюк когда-либо исполняется после git clone
, Тем не менее, githooks
Страница man по адресу http://git-scm.com/docs/githooks явно указывает способ избежать его выполнения, а также параметры, передаваемые в случае его выполнения, что указывает на возможность выполнения пользовательского хука после git-clone
,
Итак, как это возможно? Я явно что-то здесь упускаю.
Оказывается
2 ответа
Я полагаю, вы можете сделать выборочную установку - переименуйте хуки в .../share/git-core/templates/hooks
удалить .sample
суффикс.
Вы также можете сделать каталог шаблонов полным символических ссылок на каталог ловушек внутри хранилища (например, post-checkout -> ../../hooks/post-checkout
). Затем, если клонированный репо содержал этот конкретный хук, он был бы выполнен.
Вы правы, однако, в большинстве случаев этого не произойдет.
Изменить: я только что проверил, и --template
опция действительно сохраняет права доступа, так что это гораздо более простой способ сделать это. Что вы увидели, чтобы показать, что это оторвалось?
Последнее слово о версиях: вы просматриваете документацию в Интернете для более новой версии git, чем вы используете. Эта функция была добавлена в dfa7a6c (клон: запускать ловушку после проверки при оформлении покупки); git description говорит, что это не было включено до v1.6.2-rc2.
Когда запускается git-init, несколько примеров хуков копируются в
hooks
каталог нового репозитория, но по умолчанию все они отключены. Чтобы включить хук, переименуйте его, удалив его.sample
суффикс.
Эта инициализация происходит как часть создания клона - обратите внимание на призыв к init_db
в builtin-clone.c
,
Например:
$ cat / tmp / my-git-template / hooks / post-checkout #! / Бен / Баш echo "Привет от $ 0" $ git clone --template = / tmp / my-git-template file: ///tmp/repo.git my-clone Инициализированный пустой репозиторий Git в /tmp/my-clone/.git/ Удаленный: Подсчет объектов: 3, сделано. удаленный: Всего 3 (дельта 0), повторно используется 0 (дельта 0) Получение объектов: 100% (3/3), сделано. Привет из.git / hooks / post-checkout