Есть ли способ отслеживать изменения git hook? У меня есть три крючка, которые появляются только на моей машине, а не когда мои другие разработчики приходят. Попытка git add
не работает.
Отслеживание изменений на крючках в .git/hooks
Ответ 1
http://benjamin-meyer.blogspot.com/2008/10/git-hooks.html
Файлы в каталоге .git/hooks не являются частью репозитория, поэтому они не отслеживаются. Обходным путем является наличие каталога git_hooks в верхней части вашего репозитория, как это сделано в Arora и symlink.git/hooks для git_hooks всякий раз, когда вы клонируете. Таким образом, крючки будут частью проекта, под контролем версий и доступными для всех.
Ответ 2
Я понимаю, что этот вопрос - годы, но я чувствую, что это нужно сказать для таких путешественников, как я, которые заходят сюда: Крюки не отслеживаются дизайном! Брайан ответ будет работать, но дело в том, что вы действительно доверяете всем остальным, с которыми работаете, чтобы не помещать вредоносный код в репозиторий, и ваши крючки затем выполняются без вопросов; это само определение дыры в безопасности.
Ответ 3
Изменить ответ Брайана, чтобы учесть важный момент Филиппа:
Если у вас есть пользователь с доступом для записи, который создает крючок (скажем, пост-фиксацию) с помощью "#!/bin/sh rm -rf ~", идет ваш домашний каталог. (Или, может быть, нечто более доброкачественное, но все же глупое.)
Чтобы защитить от этого, было бы лучше не символизировать каталог, а скопировать их вручную в каталог git_hooks и из него. Да, вы должны помнить о том, чтобы вручную копировать эти файлы при их обновлении, но лучше, чем ничего, и все же вы не предоставляете кому-то доступ на уровне пользователя к командам на вашем компьютере.
ОБНОВЛЕНИЕ: Как уже упоминалось ниже, если вы планируете сменить крючки на кучу, вы можете сделать оболочку script, которая копирует файлы, а затем запускает коммит. Однако автоматизация фиксации (с git добавлением и вводом автоматического сообщения) действительно беспорядочна. Лучшей идеей было бы, чтобы один из ваших крючков выполнил копию в этом каталоге "git_hooks" перед фиксацией. Таким образом, злоумышленник не сможет зафиксировать файл, который будет запущен при следующем вызове вызова.
Ответ 4
Используйте шаблоны шаблонов. Из клона git вы можете использовать флаг --template=<template_directory>
для добавления файлов в $GIT_DIR
. Вам также понадобится создать каталог, в котором содержится ваш шаблон, или использовать gits, предоставленное местоположение /usr/share/git-core/templates
. Используя шаблон dir, вы можете активировать активный крюк, который будет запущен в директории hooks from creation.
Я не уверен, как часто ваши люди будут редактировать, но вы можете сохранить этот шаблон в репо, к которому все имеют доступ. На самом деле это должен быть один крючок, который запускает файл в репо, который содержит весь код, который вам нужен для автоматического запуска.
Как уже упоминалось, как только вы выполняете неизвестный код автоматически, вы открываете себе риск.
Ответ 5
Возрождая этот старый поток, вы можете иметь отдельный управляемый версией каталог, который содержит ваши крючки, затем используйте git config
core.hooksPath
для таргетинга на этот каталог.