【问题标题】:How to force GIT post-receive hook not to be executed by the client如何强制客户端不执行 GIT post-receive hook
【发布时间】:2012-07-24 17:30:00
【问题描述】:

GIT 新手尝试实施工作流。

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

我们创建了一个 bash 脚本作为位于 w:/webs/site.com/site.git/hooks/post-receive 上的“接收后”挂钩,我们认为这是由“linux” git 在 `/home/samba/webs/site.com/hooks... 之类的地方执行,其中包含一个条件脚本,具体取决于提交给结帐的分支,类似于:

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

问题是当我们从我们的 tortoiseGIT 本地副本推送到源分支时,钩子失败并显示:

远程:致命:无法切换到 '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 变量?谢谢。

【问题讨论】:

  • windows 客户端由于钩子的性质而无法执行钩子。这是一个 bash 脚本。 Windows 中没有这样的解释器
  • 客户端通过 GIT 解释器执行 bash,所以这真的不是问题。解决方案是使用 git repos 本身的相对路径。请在下面回答。
  • 不知道。谢谢

标签: git githooks


【解决方案1】:

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

我们现在发现,无论是通过 Samba 访问的 Windows 客户端还是通过 Linux 的 SSH git 推送,使用 GIT_WORK_TREE="../html" 都能完美运行。

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

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

出于这个原因,我们最终决定通过 SSH 访问存储库,即使是本地的。 ;(

【讨论】:

  • 澄清... GIT 和 SVN 都可以通过在 Windows 客户端中显示为带有目标路径的文本文件来正确处理符号链接。它们包括一个特殊位,可以正确恢复它们。为此,应通过 Linux 客户端或控制台创建存储库(在 SVN 中导入)。
  • 非常感谢!我是从目录本身执行的!
猜你喜欢
  • 2013-06-19
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多