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,等等)
在我们的项目中,有使用 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,等等)