Git checkout-index не работает в git hooks - PullRequest
0 голосов
/ 08 июня 2018

В .git/hooks, я включаю pre-commit.Я хочу извлечь поставленные файлы в другой каталог.Вот моя команда.

git diff --cached --name-only | grep -E ".*\.(kt|java)" | git --git-dir=.git --work-tree=staged-dir checkout-index -f -q --stdin

Как видите, я фильтрую файлы java и kotlin.Однако приведенный выше код не работает для меня в pre-commit.Но если я выполняю указанную выше команду в терминале, подготовленные файлы извлекаются в каталог staged-dir.

EDIT

Когда я удаляю checkout-index, появляется некоторый вывод.

git diff --cached --name-only | grep -E ".*\.(kt|java)"

проект / A.kt

проект / B.java

РЕДАКТИРОВАТЬ Для структуры проекта

rootProject
  |---.git
  |---staged-dir

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Если в вашем ~/.gitconfig установлено значение core.hooksPath, это отключает перехваты для каждого репозитория.Попробуйте закомментировать эту конфигурацию и убедитесь, что ловушка выполняется, добавив в нее следующие строки:

#!/bin/bash
echo 'OK' > "`git rev-parse --show-toplevel`"/pre-commit-hook-executed

Необходимо создать файл в верхнем каталоге хранилища.Если он не существует после фиксации (или, по крайней мере, при открытии редактора сообщений о фиксации), перехват не выполняется.

Подробнее см. https://git -scm.com / docs / git-config# git-config-corehooksPath

0 голосов
/ 08 июня 2018

Сделать файл исполняемым и добавить правильный шебанг (т. Е. ! # / Bin / bash )

Из документации git :

Чтобы включить скрипт перехвата, поместите файл в подкаталог ловушек вашего каталога Git с соответствующим именем и исполняемым.

...