Есть ли способ отслеживать изменения хуков git? У меня есть три перехватчика, которые появляются только на моей машине, а не при загрузке других разработчиков. Попытка git add
не работает.
Отслеживание изменений хуков в .git / hooks
Ответы (6)
http://benjamin-meyer.blogspot.com/2008/10/git-hooks.html < / а>
Файлы в каталоге .git / hooks не являются частью репозитория и поэтому не отслеживаются. Обходной путь - иметь каталог git_hooks в верхней части вашего репозитория, как это сделано в Arora, и символическую ссылку .git / hooks на git_hooks всякий раз, когда вы клонируете. Таким образом, хуки станут частью проекта, находятся под контролем редакции и будут доступны всем.
Я понимаю, что этому вопросу много лет, но я чувствую, что это нужно сказать путешественникам, подобным мне, которые попадают сюда: крючки не отслеживаются по замыслу! Ответ Брайана будет работать, но дело в том, что вы фактически доверяете всем остальным, с кем работаете, не помещать вредоносный код в репозиторий, который ваши хуки затем без вопросов выполняют; это само определение дыры в безопасности.
git_hooks
каталог в совершенно отдельный проект и разрешив репо только тем людям, которые обладают достаточными знаниями и несут ответственность за изменения.
- person sobi3ch; 03.04.2015
rake spec
и верю, что не работаю с каким-то психопатом, который поместил system("rm -rf / --no-preserve-root")
в Rakefile. Я не понимаю, чем по-другому доверять моим соавторам в том, что они не использовали вредоносный код для хуков git ...
- person lamont; 19.08.2016
FileUtils.rm_rf(".")
в моем репо и полностью уничтожили мое локальное дерево (и могли легко уничтожить мой домашний каталог). Мой аргумент заключается в том, что git-hooks не более привилегированы, чем любые другие тысячи и тысячи строк кода в репозитории, который я запускаю ежедневно. Все это может испортить мне день. Можете ли вы объяснить фундаментальную разницу между хуками git и моими фреймворком и тестами для модульного тестирования?
- person lamont; 24.08.2016
git_hooks
. Перед этим вы ДОЛЖНЫ проверить его содержимое. При этом нет ничего неконтролируемого.
- person Damien Flament; 15.06.2017
Возродив этот старый поток, у вас может быть отдельный каталог с контролируемой версией, содержащий ваши хуки, а затем использовать git config
core.hooksPath
для таргетинга на этот каталог.
Изменение ответа Брайана, чтобы учесть важный момент Филиппа:
Если у вас есть пользователь с доступом на запись, который создает перехватчик (скажем, после фиксации) с помощью '#! / Bin / sh rm -rf ~', он переходит в ваш домашний каталог. (Или, может быть, что-то более мягкое, но все же глупое.)
Чтобы защититься от этого, было бы лучше не создавать символические ссылки на каталог, а вручную копировать их в каталог git_hooks и из него. Да, вы должны не забыть вручную копировать эти файлы при их обновлении, но лучше, чем ничего, и тем не менее вы не предоставляете кому-либо доступ к командам на вашем компьютере на уровне пользователя.
ОБНОВЛЕНИЕ: как упоминалось ниже, если вы планируете менять свои хуки в кучу, вы можете создать сценарий оболочки, который копирует файлы, а затем запускает фиксацию. Однако автоматизация фиксации (с помощью git add и ввода автоматического сообщения) действительно беспорядочная. Лучшей идеей было бы, чтобы один из ваших хуков делал копию в этот каталог 'git_hooks' перед фиксацией. Таким образом, злоумышленник не сможет зафиксировать файл, который будет запущен при следующем вызове ловушки.
Другим решением (не связанным с отслеживанием / управлением версиями) может быть использование плагина, который будет обрабатывать хуки за вас.
Например: в случае веб-приложения представьте, что вы можете добавить один скрипт в пакет json, который будет настраивать перехватчики перед фиксацией!
Вот хороший пример: https://github.com/typicode/husky
В конце концов, этот скрипт может находиться под контролем версий, и вам не нужно иметь дело с папкой хуков внутри .git.
Используйте каталоги шаблонов. Из клона git вы можете использовать флаг --template=<template_directory>
для добавления файлов в $GIT_DIR
. Вам также нужно будет создать каталог, в котором будет храниться ваш шаблон, или использовать gits, указанное в местоположении /usr/share/git-core/templates
. Используя каталог шаблонов, вы можете иметь активную ловушку, готовую к запуску в директории хуков с момента создания.
Я не уверен, как часто ваши люди будут вносить правки, но вы можете сохранить этот шаблон в репозитории, к которому у всех есть доступ. На самом деле это должен быть один перехватчик, который запускает файл в репозитории, содержащий весь код, который вам нужен для автоматического запуска.
Как уже упоминалось другими, как только вы автоматически запускаете неизвестный код, вы подвергаетесь риску.