您如何跨各种平台(例如,*nix 和 windows)管理 git pre/post 提交钩子?
为这种情况推荐了任何最佳实践?
您如何跨各种平台(例如,*nix 和 windows)管理 git pre/post 提交钩子?
为这种情况推荐了任何最佳实践?
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% 的工作。之后,在您所针对的所有各种环境中进行测试测试。