Git 的条件 shebang 挂钩跨平台

Conditional shebang for Git hooks cross platform

在我们的项目中,有使用 windows 的开发人员,也有使用 linux 的开发人员。我们有 githooks,它使用 shebang 指向本地 windows shell 执行器,例如:

#!C:/Program\ Files/Git/usr/bin/sh.exe

REGEX_ISSUE_ID="[a-zA-Z0-9,\.\_\-]+-[0-9]+"
BRANCH_NAME=$(git symbolic-ref --short HEAD)
ISSUE_ID=$(echo "$BRANCH_NAME" | grep -o -E "$REGEX_ISSUE_ID")
LAST_COMMIT_MSG=$(git show -s --format=%s)

如您所见,shebang 指向 windows 文件夹。这对 linux 用户永远不起作用。有没有更好的方法来处理这个以跨平台工作?

至少对于顶级 git 钩子脚本(例如 .git/hooks/pre-commit),git 对于 windows 将解释 #!/bin/sh shebang 并使用bash 脚本解释器。

如果您随后在该脚本中编写 posix-shell-compatible 代码,它将可以在 windows 和其他 posixly-correct 机器之间移植

根据我的经验,编写 posixly-correct shell 有点痛苦,所以我 有条件地 在其他 #!/usr/bin/env bash 上安装该脚本平台和 #!/bin/sh 在 windows source

然后我建议适当地明确调用其他脚本(python,等等)