Git-Clone и крюк после проверки - PullRequest
27 голосов
/ 26 января 2010

Согласно инструкции, хук post-checkout запускается после git checkout (как и ожидалось), но также и после git clone (если не передать --no-checkout).

Хорошо, теперь, учитывая следующее:

  • у вас нет локального хранилища до git clone
  • хуки не синхронизируются между пультами
  • хуки, хранящиеся в пользовательском каталоге шаблонов, используемом с --template, копируются неисполняемыми, и поэтому не выполняется после git clone (что на самом деле неверно, как заявлено Джефроми в его ответе, но крюк все еще не выполнен)

Кажется невозможным, чтобы post-checkout хук когда-либо выполнялся после git clone. Тем не менее, справочная страница githooks по адресу http://git -scm.com / docs / githooks явно указывает способ избежать его выполнения, а также параметры, передаваемые в случае его выполнения, что указывает на это возможно выполнить пользовательский хук после git-clone.

Итак, как это возможно? Я явно что-то здесь упускаю.

Получается

Ответы [ 2 ]

15 голосов
/ 26 января 2010

Полагаю, вы могли бы выполнить выборочную установку - переименуйте хуки в .../share/git-core/templates/hooks, чтобы удалить суффикс .sample.

Вы также можете сделать каталог шаблонов полным символических ссылок на каталог ловушек внутри репозитория (например, post-checkout -> ../../hooks/post-checkout). Затем, если клонированный репозиторий содержит этот конкретный хук, он будет выполнен.

Вы правы, однако, в большинстве случаев этого не произойдет.

Редактировать: я только что проверил, и опция --template, похоже, сохраняет права доступа, так что это гораздо более простой способ сделать это. Что бы вы увидели, чтобы указать, что он лишился этого бита?

Последнее слово о версиях: вы просматриваете документацию в Интернете для более новой версии git, чем вы используете. Эта функция была добавлена ​​в dfa7a6c (клон: запускать ловушку после проверки при оформлении заказа); git description говорит, что это не было включено до v1.6.2-rc2.

10 голосов
/ 26 января 2010

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

При запуске git-init несколько примеров хуков копируются в каталог hooks нового репозитория, но по умолчанию все они отключены. Чтобы включить хук, переименуйте его, удалив суффикс .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
...