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

Отслеживание изменений на крючках в .git/hooks

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

4b9b3361

Ответ 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 для таргетинга на этот каталог.