【问题标题】:Cross platform git hooks跨平台 git 钩子
【发布时间】:2011-07-11 06:05:21
【问题描述】:

您如何跨各种平台(例如,*nix 和 windows)管理 git pre/post 提交挂钩?

对于这种情况有什么最佳实践推荐吗?

【问题讨论】:

    标签: git shell cross-platform githooks


    【解决方案1】:

    git 钩子实际上与任何 shell 脚本没有什么不同,因为保持它们“跨平台”的最佳实践同样适用。细微的差别是,您也可能将 Windows *nix 仿真层作为这些钩子的主要用户,与大多数实际的 Unix 环境相比,它们可能相对较弱。

    我刚刚将一个 post-commit 钩子(并编写了一个 pre-commit 钩子)移植到使用 MINGW32 的默认 Git for Windows。自从上一个版本对可用的脚本环境做出了一些假设以来,我必须进行的一些更改:

    • 没有readlink 可用,但无论如何它在Windows 上都无效,所以我只是检查了which readlink,如果没有则不操作
    • 重定向到/dev/null 在Windows 中不起作用,您必须重定向到nul,为此我刚刚检查了uname -s 并设置了一个变量来重定向到什么
    • 没有可用的mktemp,但由于它是我们最终修剪的目录,我们使用了一个简单硬编码的目录名称
    • 出于某种原因,通过 exec >>$out 重定向 STDOUT 在 MINGW32 中可以正常工作,但对于 STDERR 的 exec 2>>$err 则不能(它似乎默默地死去),所以不幸的是,我们不得不避开该重定向

    除此之外,它工作得很好,因为其中没有很多特定于平台的“东西”。因此,只要坚持制作跨平台脚本的最佳实践,就可以至少完成 80% 的工作。之后,在您所针对的所有各种环境中进行测试测试。

    【讨论】:

    • 当然,git hook 不要求是 shell 脚本——事实上,在 Perl 的 git 的 contrib 目录中至少有一个。
    • @Jefromi 好点,虽然 [shell] 标签让我相信他是在 shell 脚本中做的,但也许他不知道他必须这样做 +1
    猜你喜欢
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 2017-08-13
    • 1970-01-01
    • 2011-04-14
    • 2019-05-15
    相关资源
    最近更新 更多