您如何跨各种平台(例如,*nix 和 windows)管理 git 预/后提交 Hook ?
针对此场景推荐的最佳做法是什么?
最佳答案
git 钩子(Hook)实际上与任何 shell 脚本没有什么不同,因为保持它们“跨平台”的最佳实践同样适用。细微差别在于,您也可能将 Windows *nix 仿真层作为这些 Hook 的主要用户,并且与大多数实际的 Unix 环境相比,这些可能相对较弱。
我刚刚将一个提交后 Hook (并编写了一个提交前 Hook )移植到默认的 Git for Windows,它使用 MINGW32。自上一版本对可用的脚本环境做出一些假设后,我必须做出一些更改:
- 没有可用的
readlink
,但无论如何它在 Windows 上都是无效的,所以我只是入侵检查了which readlink
并且如果没有就没有操作 - 重定向到
/dev/null
在 Windows 中不起作用,相反你必须重定向到nul
,为此我只是做了一个uname - s
检查并设置要重定向到的变量 - 没有可用的
mktemp
,但由于它是我们最终要修剪的目录,所以我们使用了一个简单的硬编码目录名 - 出于某种原因,通过
exec >>$out
重定向 STDOUT 在 MINGW32 中工作正常,但exec 2>>$err
对 STDERR 没有(似乎默默地死去),所以不幸的是我们不得不避开这种重定向
除此之外,它按原样运行得很好,因为其中没有很多特定于平台的“东西”。因此,只要坚持制作跨平台脚本的最佳实践,这至少能让您完成 80% 的任务。之后,在您针对的所有各种环境中进行测试测试。
关于git - 跨平台 git 钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5235277/