git hook 中提示?

git hook 中提示?

我正在尝试实现一个选项来跳过预提交挂钩中的预提交挂钩(这将被视为通过并执行提交)。

一切运行正常,除了提示读取一个空字符串(“”),因此开关将转到默认的“无效参数”,从而导致无限循环。

我猜我对预提交的工作方式有些不理解,这导致了这种行为。您能否解释一下,如果可能的话,能否提示一下解决方案?

while true; do
  read -p "Do you want to run pre-commit hook? (N=pass) [Y/N]: " choice
  
  #tried alternative approach, but no success.
  #echo "Do you want to run pre-commit hook? (N=pass) [Y/N]: "
  #read choice
  echo "Debug: response=\"$choice\""
  case $choice in
    [Yy]* )
      echo "Running pre-commit hook...";
      break;;
    [Nn]* )
      echo "Skipping pre-commit hook. This is evaluated as passed.";
      exit 0;;
    * )
      echo "Invalid input. Please enter 'y' or 'n'.";;
  esac
done

答案1

看起来这是预期的行为,因为 Git 不在交互式环境中运行钩子。

一些快速谷歌搜索发现这个问题,这看起来几乎相同。为了便于参考,那里接受的答案指出您可以通过exec < /dev/tty作为挂钩的一部分运行来打开标准输入。这应该在现有命令之前完成read,允许它按照您的预期从标准输入中读取。

相关内容