Git Крючки. Как читать переменные из пользовательского ввода? - PullRequest
3 голосов
/ 05 августа 2020

Я пытаюсь создать ловушку перед фиксацией. И я хочу, чтобы он взаимодействовал с пользователем. Итак, я обнаружил, что могу использовать read -p "Enter info: " info Или просто read info

Я создал файл: pre-commit:

#!/bin/sh
read -r input
echo $input

Он просто должен читать переменную и выводить ее. Но не работает. Я имею в виду, что это не работает как крючок. Если я запустил его с помощью терминала с ./.githooks/pre-commit, все в порядке. Но когда я использую git commit -am "Hook", он отображает пустую строку и ничего не читает. Я что-то делаю не так?

Git версия 2.28.0. windows .1

1 Ответ

4 голосов
/ 05 августа 2020

Как в этой сущности , вам может потребоваться принять во внимание stderr (используется командами Git, как , например, здесь )

#!/bin/sh
# Redirect output to stderr.
exec 1>&2
# enable user input
exec < /dev/tty

Пример сценария, следующего за этими строками:

consoleregexp='console.log'
# CHECK
if test $(git diff --cached | grep $consoleregexp | wc -l) != 0
then 
  exec git diff --cached | grep -ne $consoleregexp
  read -p "There are some occurrences of console.log at your modification. Are you sure want to continue? (y/n)" yn
  echo $yn | grep ^[Yy]$
  if [ $? -eq 0 ] 
  then
    exit 0; #THE USER WANTS TO CONTINUE
  else
    exit 1; # THE USER DONT WANT TO CONTINUE SO ROLLBACK
  fi
fi
...