如何在不同平台(例如*nix和windows)之间管理git的pre/post commit hooks?
针对这种情况,是否有任何最佳实践建议?
如何在不同平台(例如*nix和windows)之间管理git的pre/post commit hooks?
针对这种情况,是否有任何最佳实践建议?
Git 钩子与任何 Shell 脚本并没有太大区别,因此保持“跨平台”的最佳实践同样适用。唯一的区别是你可能也要针对 Windows *nix 模拟层作为这些钩子主要用户,而相比于大多数实际的 Unix 环境,这些模拟层相对不稳定。
我刚刚将一个 post-commit 钩子(还编写了一个 pre-commit 钩子)移植到默认的 Git for Windows 中,它使用的是 MINGW32。 由于之前的版本做出了一些关于可用脚本环境的假设,我不得不进行一些更改:
readlink
,但在 Windows 上无效,因此我检查了 which readlink
并在没有时进行了一些操作/dev/null
,而需要重定向到 nul
,因此我进行了 uname -s
检查,并设置了一个变量以确定重定向位置mktemp
,但由于最终会删除它,所以我们使用了一个简单的硬编码目录名exec >>$out
重定向 STDOUT 可以正常工作,但通过 exec 2>>$err
重定向 STDERR 不行(它似乎会默默死亡),因此不幸的是我们只好放弃这种重定向除此之外,由于其中没有太多特定于平台的“东西”,所以它完全可以按原样运行。所以要遵循制作跨平台脚本的最佳实践,这将让你至少达到 80% 的目标。之后,请在针对的各种环境中进行测试测试测试。