Подтвердить что ты не робот

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.

Итак, как это возможно? Я, очевидно, что-то пропустил.

Выключает

4b9b3361

Ответ 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