bash - Git 的条件 shebang 挂钩跨平台

在我们的项目中,我们有使用 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 用户永远不起作用。有没有更好的方法来处理这个跨平台工作?

回答1

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

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

根据我的经验,编写完全正确的 shell 有点痛苦,所以我有条件地在其他平台上使用 #!/usr/bin/env bash 和在 windows https://github.com/pre-commit/pre-commit/blob/e93c1c6f278b23f98f95c0e0706589f7932be298/pre_commit/commands/install_uninstall.py#L97-L102 上使用 #!/bin/sh 安装该脚本

然后,我建议酌情明确调用其他脚本(python 等)

相似文章

git - Git rebase 无效上游“开发”的问题

我有一种情况,我在3个月前从开发中创建了一个特性分支,从那时起,其他同事一直在研究其他发布到开发中的特性分支。我现在想将我的更改也集成到开发中,而不会破坏他们的代码,也不会破坏我的代码。我对此进行了研...

最新文章