Обновите файл с файлом pre_commit hook при управлении версиями

Недавно я обновил файл pre_commit.sample, чтобы запустить rubocop при фиксации (переименован в pre_commit).

#!/bin/sh
#
# Check for ruby style errors
rake run:rubocop

Ошибочно, я подумал, что это будет обновляться на других машинах-разработчиках, если вы потянете за изменения. Как я могу гарантировать, что у любого, кто вытащит это изменение, будет обновлен файл pre_commit

Спасибо

Ответ 1

Как я упоминал в разделе Git commit hooks - глобальные настройки "и" изменить default git hooks "в мае 2016 года, git 2.9 и 2.10 введены git config core.hooksPath.

Это похоже на путать OP:

Если у меня есть существующее репо и вы хотите, чтобы все другие разработчики, которые заставляют изменения иметь обновленный крюк для фиксации, например, как я могу это сделать?
В пределах репо есть /.git/hooks/pre_commit, могу ли я указать его на

Точнее, в репозитории git существует /.git/hooks/pre-commit.sample и, если вы хотите использовать общий крюк pre-commit для всех разработчиков, вы не должны делать, а затем указывать на /.git/hooks/pre_commit script внутри ваше местное репо.

Все разработчики должны ссылаться на один и тот же общий доступ к сети, общий доступ к сети, используемый с git config core.hooksPath \\a\common\shared\path: этот параметр необходимо активировать на каждой рабочей станции разработчика, либо в пределах своего репо (локальная настройка), либо для всех их репо (глобальная настройка: git config --global core.hooksPath \\a\common\shared\path.

(я использую здесь синтаксис Windows UNC, используйте тот, который подходит для вашей ОС)

Как только все они ссылаются на один и тот же путь, вы можете настроить свой крюк перед фиксацией:

 \\a\common\shared\path\pre-commit

Затем вы можете обновить этот script (тот, к которому обращаются все), что позволяет всем разработчикам мгновенно получать обновления.

Ответ 2

До тех пор, пока git v2.9 не было способа обновить крючки на стороне клиента.

Git v2.9 открыла новую конфигурацию, чтобы разрешить это следующим образом:

git config [--local] core.hooksPath ...

core.hooksPathПо умолчанию git будет искать ваши крючки в каталоге $GIT_DIR/hooks. Установите это на другой путь, например. /etc/ git/hooks, а git попытается найти ваши крючки в этом каталоге, например. /etc/ git/hooks/pre-receive вместо $GIT_DIR/hooks/pre-receive.

Путь может быть как абсолютным, так и относительным.  Относительный путь берется относительно каталога, в котором выполняются крючки.

Эта переменная конфигурации полезна в тех случаях, когда вам хочется централизованно настроить ваши крюки git вместо их настройки на основе каждого репозитория или в качестве более гибкой и централизованной альтернативы наличию init.templateDir, где вы изменили значение по умолчанию крючки.