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


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.