跨平台git hooks

Yuv*_*dam 16 git shell cross-platform githooks

你如何跨各种平台(比如*nix和windows)管理git pre/post commit钩子?

是否为此方案推荐了哪些最佳做法?

Dan*_*olo 12

git钩子与任何shell脚本没有什么不同,因为保持它们"跨平台"的最佳实践同样适用.微小的区别在于您也可能将Windows*nix仿真层作为这些挂钩的主要用户,并且与大多数实际的Unix环境相比,这些可能会相对瘫痪.

我刚刚将一个post-commit钩子(和一个预提交钩子)移植到默认的Git for Windows,后者使用MINGW32.自上一版本以来我必须做的一些更改对可用的脚本环境做了一些假设:

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

除此之外,它的工作原理非常好,因为其中没有很多特定于平台的"东西".因此,只需坚持制作跨平台脚本的最佳实践,这应该至少可以让你获得80%的成功.之后,在您要定位的所有各种环境中进行测试测试.

  • 当然,并不要求git hook是shell脚本 - 事实上,在Perl中至少有一个在git的contrib目录中. (5认同)