如何强制GIT post-receive hook不被客户端执行

时间:2012-07-24 17:30:01

标签: git githooks

GIT尝试实施工作流程的新手。

我们的本地办公室设置使用与Apache,Linux等共享的Debian Samba磁盘。因此,我们从w:/webs/site.com/site.git类型的“本地路径”克隆项目。这是BARE回购。

我们创建了一个bash脚本作为“post-receive”钩子,位于 w:/webs/site.com/site.git/hooks/post-receive ,我们认为会是由“linux”git执行的类似`/home/samba/webs/site.com/hooks ...包括一个条件脚本,取决于提交到checkout的分支类似于:

GIT_WORK_TREE=/home/samba/webs/site.com/html git checkout -f $BRANCH

问题是当我们从我们的tortoiseGIT本地拷贝推送到origin分支时,钩子失败了:

  

remote:fatal:无法切换到'C:/ Program Files   (x86)/Git/home/samba/webs/site.com/html':没有这样的文件或   目录到w:/webs/site.com/site.git

我们理解的意思是客户端GIT正在执行WORK_TREE或整个钩子脚本。

问题在于我们计划打开SSH和其他访问权限,因此如果我们使用Windows本地路径,那么当我们从非Windows本地网络客户端推送时,这些路径会失败。替代方案可能是通过SSH推送回购,即使在本地,但我们认为这是相当低效的,只有这个钩子问题才需要。

我们可以使用哪些建议和/或GIT变量可以兼容两者?感谢。

1 个答案:

答案 0 :(得分:2)

问题实际上与GIT_WORK_TREE的路径有关,而不是解释器本身。

我们现在认为使用:GIT_WORK_TREE =“../ html”可以从通过Samba访问的Windows客户端或通过Linux进行SSH git推送完美运行。

显然GIT 挂钩在存储库根目录本身 (而不是挂钩目录)中执行.git存在。

我们的“其他”问题现在与符号链接有关...如果推送过程是从Windows客户端完成的,则符号链接在自动生成(签出)HTML目录中显示为文件,而不像原始符号链接一样。

我们终于决定通过SSH访问repos,即使是本地的。 ;(