Отслеживание изменений в хуках в .git / hooks - PullRequest
44 голосов
/ 16 декабря 2010

Есть ли способ отследить изменения git hook?У меня есть три хука, которые появляются только на моей машине, а не тогда, когда другие разработчики получают.Попытка git add не работает.

Ответы [ 6 ]

41 голосов
/ 16 декабря 2010

http://benjamin -meyer.blogspot.com / 2008/10 / git-hooks.html

Файлы в каталоге .git / hooks не являются частьюи поэтому они не отслеживаются.Обходное решение - иметь каталог git_hooks в верхней части вашего репозитория, как это делается в Arora, и symlink .git / hooks для git_hooks всякий раз, когда вы клонируете.Таким образом, хуки будут частью проекта, под контролем версий и доступны для всех.

12 голосов
/ 21 мая 2014

Я понимаю, что этому вопросу уже много лет, но я чувствую, что это нужно сказать для таких путешественников, как я, которые попадают сюда: крючки не отслеживаются по замыслу! Ответ Брайана сработает, но дело в том, что вы эффективно доверяете всем остальным, с кем работаете, чтобы не помещать вредоносный код в репозиторий, который ваши хуки затем выполняют без вопросов; это само определение дыры в безопасности.

3 голосов
/ 10 марта 2015

Изменение ответа Брайана, чтобы учесть важный момент Филиппа:

Если у вас есть пользователь с правами записи, который создает хук (скажем, post-commit) с помощью '#! / Bin / sh rm -rf~ 'там идет ваш домашний каталог.(Или, может быть, что-то более мягкое, но все же глупое.)

Чтобы защититься от этого, лучше не ссылаться на каталог, а копировать его вручную в каталог git_hooks и из него.Да, вы должны помнить, чтобы вручную копировать эти файлы при обновлении, но лучше, чем ничего, и все же вы не предоставляете кому-то доступ на уровне пользователя к командам на вашем компьютере.

ОБНОВЛЕНИЕ: Как упоминалось нижеЕсли вы планируете изменить кучу хуков, вы можете создать скрипт-обертку, который копирует файлы и затем запускает коммит.Однако автоматизировать коммит (с помощью git add и ввода автоматизированного сообщения) действительно сложно.Лучше было бы сделать так, чтобы один из ваших хуков сделал копию в этот каталог 'git_hooks' перед фиксацией.Таким образом, злоумышленник не сможет зафиксировать файл, который будет запущен при следующем вызове ловушки.

2 голосов
/ 29 марта 2018

Другим решением (которое не связано с отслеживанием / управлением версиями) может быть использование плагина, который будет обрабатывать хуки для вас.

Например: представьте, что в случае веб-приложения вы можете добавить в пакет json один скрипт, который будет настраивать хуки предварительной фиксации!

Вот хороший пример: https://github.com/typicode/husky

В конце концов, этот скрипт может находиться под контролем версий, и вам не нужно иметь дело с папкой hooks внутри .git

1 голос
/ 26 сентября 2017

Возрождая этот старый поток, вы можете создать отдельный каталог с управлением версиями, содержащий ваши хуки, а затем использовать git config core.hooksPath для нацеливания на этот каталог.

0 голосов
/ 15 августа 2015

Используйте шаблон dirs.С помощью git clone вы можете использовать флаг --template=<template_directory> для добавления файлов в $GIT_DIR.Вам также нужно будет создать каталог, в котором будет содержаться ваш шаблон, или использовать предоставленное gits местоположение /usr/share/git-core/templates.Используя шаблон dir, вы можете иметь активный хук, готовый для запуска в директории хуков от создания.

Я не уверен, как часто ваши люди будут вносить изменения, но вы можете сохранить этот шаблон в репо, к которому у всех есть доступ.На самом деле это должен быть один хук, который запускает файл в репозитории, который содержит весь код, необходимый для автоматического запуска.

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

...