Как заменить локальные git перехватчики с обновленными версиями с помощью git init?

У меня точно такой же вопрос, как и у этого пользователя:

git шаблон инициализации, заменив измененные перехватчики

У меня есть новый файл шаблона в моем глобальном крюке git. Однако исходный файл шаблона уже загружен, поэтому git init не перезаписывается. Я читаю то же самое здесь, это выглядит как правильное поведение git:

Из http://www.cs.potsdam.edu/cgi-bin/man/man2html?1+git-init:

Запуск git init в существующем репозитории безопасен. Я не буду перезаписать то, что уже есть. Основная причина rerunning git init должен забрать недавно добавленные шаблоны.

Итак, что является хорошим способом принудительно перезагрузить новые шаблонные крючки git? У меня много перехватов во многих репозиториях git на нескольких компьютерах и используется разными пользователями. Самый практичный способ состоит в том, чтобы пользователи выполняли определенную команду, вместо того, чтобы сообщать им сначала удалить крюк, а затем запустить команду git init. Есть ли способ сделать это?

Ответ 1

  Наиболее практичный способ - заставить пользователей запускать определенную команду, а не указывать им сначала удалить ловушку, а затем выполнить команду git init

В этом случае одним из возможных способов будет распространение среди этих пользователей скрипта, который делает именно это (вы можете создать версию этого скрипта в каждом репо).
Вместо того, чтобы делать git init напрямую, они вызывали бы этот скрипт, который бы:

  • снимите крючки
  • позвоните в git init --template=

Но остерегайтесь пути, который вы используете с опцией --temaplate.
Относительный pathname дан "git init --template=<path> <repo>" должен быть относительно каталога, в котором вызывается "git init", но вместо этого он был сделан относительно хранилища, которое было исправлено с помощью Git 2.22.1 (Q2 2019).

См. коммит e1df7fe (10 мая 2019 года) Нгуен Тай Нгук Дуй (pclouds).
(Merged by Junio C Hamano -- [TG46] -- in commit 35d7715, 25 Jul 2019)

init: сделать путь --template относительно $CWD

Во время git-init мы chdir() в целевой каталог, но --template не настроен.
Так что это относится к целевому каталогу, а не к текущему каталогу.

Было бы хорошо, если бы это было задокументировано, но --template в git-init.txt ничего не упоминает об этом поведении.
Измените его на $CWD, что гораздо более интуитивно понятно.