【发布时间】:2021-06-08 21:06:57
【问题描述】:
我偶然发现了 git-hooks 并试图创建一个在 Windows 上运行。所以我决定使用批处理文件来这样做,因为它看起来很容易。
首先,我将 pre-commit 示例重命名为 pre-commit 并在那里调用了我的 bat 步骤:
#!/bin/sh
$(pwd)/git-hooks/hooks/unit_test.bat &&
$(pwd)/git-hooks/hooks/integration_test.bat
unit_test.bat 只显示一些消息并运行单元测试任务,但 integration_test.bat 会提示用户是否要运行这些测试因为它们通常较慢。
问题在于提示(使用“choice”或“set /p”完成)没有得到用户输入:
- 'set /p' 不等待用户输入
- “选择”冻结,不允许任何用户输入
我尝试添加 start 来调用 .bat 文件,但它会在另一个 cmd 上打开它们,因此无法停止提交。
引用的文件
-
unit_test.bat
@echo off echo ^> Testes unitários call gradlew testReport || (echo(& echo Testes unitários falharam! Acesse o relatório de testes para conferir.& exit 1)) -
integration_test.bat
@echo off echo(echo ^> Testes integrados %SystemRoot%\System32\choice.exe /C sn /M "Esses testes geralmente são mais lentos. Quer rodar os testes integrados" if ERRORLEVEL 2 goto nao call gradlew integrationTests || (echo(echo Testes integrados falharam! Acesse o relatório de testes para conferir.) && exit 1) :nao echo(echo Não se esqueça de confirmar que os testes integrados passam antes de fazer o 'git push'!) exit /B
【问题讨论】:
-
/bin/sh与/bin/bash不同,您实际上运行的是常规 shell 脚本而不是 bash 脚本,因为您的脚本调用的是/bin/sh解释器而不是/bin/bash解释器. bash 的路径在您的系统上可能不同,因此您可能需要运行which bash来确认它。 -
感谢您指出,那时我应该将其引用为 shell 脚本而不是 bash。这个细节是否也应该解决这种情况?我尝试使用
/bin/bash解释器运行,但似乎没有帮助 -
我认为这不是你问题中的问题,但我会尽量确保所有细节尽可能准确,这就是我提到的原因。
-
这是一个很好的观点,感谢您指出这一点。
-
git 钩子没有交给 tty,如果你需要它,你必须自己重新打开它(尽管钩子期间的交互性有点 imo)——在 Windows 上,我相信它正在打开 @987654330 @
标签: windows shell batch-file githooks