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.

Из документации githooks:

Когда запускается 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 
Другие вопросы по тегам