20

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

为这种情况推荐了任何最佳实践?

4

1 回答 1

15

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

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

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

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

于 2011-03-08T16:43:43.867 回答