【发布时间】:2011-07-11 06:05:21
【问题描述】:
您如何跨各种平台(例如,*nix 和 windows)管理 git pre/post 提交挂钩?
对于这种情况有什么最佳实践推荐吗?
【问题讨论】:
标签: git shell cross-platform githooks
您如何跨各种平台(例如,*nix 和 windows)管理 git pre/post 提交挂钩?
对于这种情况有什么最佳实践推荐吗?
【问题讨论】:
标签: git shell cross-platform githooks
git 钩子实际上与任何 shell 脚本没有什么不同,因为保持它们“跨平台”的最佳实践同样适用。细微的差别是,您也可能将 Windows *nix 仿真层作为这些钩子的主要用户,与大多数实际的 Unix 环境相比,它们可能相对较弱。
我刚刚将一个 post-commit 钩子(并编写了一个 pre-commit 钩子)移植到使用 MINGW32 的默认 Git for Windows。自从上一个版本对可用的脚本环境做出了一些假设以来,我必须进行的一些更改:
readlink 可用,但无论如何它在Windows 上都无效,所以我只是检查了which readlink,如果没有则不操作/dev/null 在Windows 中不起作用,您必须重定向到nul,为此我刚刚检查了uname -s 并设置了一个变量来重定向到什么mktemp,但由于它是我们最终修剪的目录,我们使用了一个简单硬编码的目录名称exec >>$out 重定向 STDOUT 在 MINGW32 中可以正常工作,但对于 STDERR 的 exec 2>>$err 则不能(它似乎默默地死去),所以不幸的是,我们不得不避开该重定向除此之外,它工作得很好,因为其中没有很多特定于平台的“东西”。因此,只要坚持制作跨平台脚本的最佳实践,就可以至少完成 80% 的工作。之后,在您所针对的所有各种环境中进行测试测试。
【讨论】: