Застосування гачка після фіксації для всіх поточних та майбутніх репостів


275

Я написав гак Git після фіксації, і він працює правильно. Однак я хочу додати цей гачок, щоб застосувати його до всіх поточних (і майбутніх) сховищ git, над якими я працюю. Я спробував додати гачок до мого, ~/.git/hooks/а не до каталогу гаків у каталозі проектів, однак це, схоже, не спрацювало.

Чи є спосіб створити глобальні гачки Git, які застосовуватимуться до всіх сховищ моєї системи (без необхідності копіювання їх у кожен каталог проектів)? Якщо ні, то яке найкраще рішення буде рухатися вперед - можливо, шаблон git-init?


3
Станом на Git 2.9 цей найкращий підхід до цього змінився: відповідь VonC - краща ставка. stackoverflow.com/a/37293198/2741954
Саймон Brahan

Чи відповідає це на ваше запитання? змінити стандартні гачки для замовчувань
Олівер Sieweke

Відповіді:


192

Я хочу додати цей гачок, щоб застосувати його до всіх поточних (і майбутніх) сховищ git, над якими я працюю

Що стосується git 2.9+ (червень 2016 року), ви лише зробите:

git config --global core.hooksPath /path/to/my/centralized/hooks

Див. " Зміна гачок за замовчуванням ": це було зроблено для управління централізованими гачками.


якщо у мене є існуюче репо, і я хочу, щоб усі інші розробники, які тягнуть зміни, мали оновлений гачок попереднього введення, наприклад, як би я це зробив? дякую
Richlewis

@Richlewis ви маєте в виду stackoverflow.com/a/40550555/6309 в повному обсязі ясно?
VonC

@Richlewis Вам потрібно буде встановити спільну папку, доступну всім розробникам, щоб вони мали посилання у власному локальному конфігурації.
VonC

на жаль, я все ще не зовсім це розумію. Чи /.git/hooks/pre_commitможна вказувати на це в репо ?
Richlewis

@Richlewis Я відповів вам на ваше оригінальне запитання.
VonC

290

Станом на git 1.7.1, ви можете встановити init.templatedir у своїй gitconfig, щоб вказати git, де шукати шаблони.

Встановіть його так:

git config --global init.templatedir '~/.git_template'

Після цього нові репозиторії, які ви створюєте або клонуєте, використовуватимуть цей каталог для шаблонів. Покладіть потрібні гачки ~/.git_template/hooks. Існуючі сховища можна повторно ініціалізувати за допомогою відповідних шаблонів, запустивши git initв той самий каталог .git, в якому знаходиться.

Для версій git, старших 1.7.1, запуск git init --template ~/.git_templateпрацюватиме, якщо ви схожі на мене, і все ще хочете керувати своїм .git_templatedir разом із рештою файлів з крапками. Ви також можете використовувати $GIT_TEMPLATE_DIRсередовище, щоб вказати, git initде знаходиться ваш каталог шаблонів.


51
Чудова відповідь. Якщо хтось ще замислюється, чи повторний запуск git initна існуючому репо не стирає його - це не так , дивіться: stackoverflow.com/questions/5149694/…
kontur

Для мене це не працювало з відносним шляхом до папки шаблонів git для копіювання файлів за допомогою git init у існуючі сховища. Я натомість використовував повний шлях.
user847988

1
У Windows без лапок: `git config --global init.templatedir d: \ git \ .git_template \`
Володимир Вуканак

1
Порада: гачки шаблонів скопійовані. Якщо ви хочете мати можливість оновити глобальні гачки разом, покладіть гачок в інше місце і додайте символьне посилання в каталог шаблонів (в Linux). Переконайтесь, що шлях посилання є абсолютним.
Тім Оллклар

1
Біг git initнасправді не оновлював гачки для мене. Здається, це не перезапише файли, які вже є. stackoverflow.com/questions/10791486/ . Замість цього потрібно спочатку видалити старі файли гака.
Phil R

69

Якщо ви хочете, щоб вони були скрізь у вашій системі (включаючи користувачів, крім вас), ви можете змінити вміст встановленого каталогу шаблонів - вони є $PREFIX/share/git-core/templates/hooks, де $PREFIX, можливо, /usr/localабо /usr.

Якщо ви хочете, щоб це було тільки для вас, то так, найпростішим буде --templateваріант git-init. Ви можете легко зберегти особистий каталог шаблонів, який посилається на встановлену версію за замовчуванням, яку ви хочете зберегти (окремі гачки, інформаційний каталог ...), а потім свій власний вміст hooks/post-commitі все, що ви хочете налаштувати.


11
Дякую, це добре вийшло. І щоб застосувати його заднім числом до своїх існуючих проектів, я просто запустився git initзнову, і це додало мого нового гака.
лебедя

Це чітке рішення, але потрібно буде змінити всі свої репости. Це можливо, але чи не існує певної можливості із плагіном чи чимось таким чином (це робиться на Bazaar)?
Мартін Удінг

2
Для вбудованого git SourceTree в OS X вони знаходяться/Applications/SourceTree.app/Contents/Resources/git_local/share/git-core/templates/hooks
CupawnTae

1
Для Windows це можна знайти в каталозі встановлення git у розділі mingw64\share\templates\hooks(або mingw32 для 32-розрядної)
nerdherd

1
@nerdherd зараз о mingw64\share\git-core\templates\hooks(gfw 2,25)
RJFalconer

7

Мінімалістичний підхід полягає у створенні git_hooks/каталогу у вашому сховищі, щоб відстежувати гачки, які ви пишете для цього проекту, доводити до відома майбутніх користувачів, згадуючи його в а README, і покладатися на них, щоб вони зробили правильно після їх клонування. Я деякий час замислювався над цим і обрав поступовий підхід. Я можу розглянути можливість використання такого інструменту, як гет-гачки .


1
Це так, настільки далеко від справжнього рішення, що мені довелося заявити, вибачте.
Віктор Шредер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.