代码之家  ›  专栏  ›  技术社区  ›  Marc Charbonneau

在远程主机上工作时Git提交权限错误

  •  0
  • Marc Charbonneau  · 技术社区  · 17 年前

    我想把我的网站置于版本控制之下。我直接在使用expandrive的服务器上工作,expandrive使用macfuse将sftp连接安装为本地卷,我可以使用终端和其他本地应用程序访问该卷。

    总之,在我尝试承诺之前,当我收到以下消息时,一切都很顺利:

    fatal: exec .git/hooks/pre-commit failed.
    

    如果我尝试手动运行exec命令,我会看到:

    -bash: /Volumes/1&1 Internet/website/.git/hooks/pre-commit: Permission denied
    -bash: exec: /Volumes/1&1 Internet/website/.git/hooks/pre-commit: cannot execute: Unknown error: 0
    

    我已经尝试使用我的sftp客户机为.git目录下的所有内容提供完全(777)权限,但仍然没有运气。有人知道我还能尝试什么吗?

    4 回复  |  直到 14 年前
        1
  •  3
  •   Paul    17 年前

    通过授予.git目录下的所有内容完全(777)权限,您已经启用了在.git/hooks中附带的所有示例脚本,通常它们的执行位是关闭的。当你尝试 commit 现在可执行的示例预提交脚本尝试运行以将提交格式化为修补程序。

    除非这是你想做的,我建议你 chmod /git/hooks/*到644,这样hook脚本就不会执行。

    编辑——重设钩子权限会使您返回问题首先出现的条件。 下一步,使用 --no-verify 标志,它应该绕过预提交挂钩(以及对提交消息的一些小检查)。这也许是个解决办法,但我还是不明白你为什么会有最初的问题。代码看起来非常简单——我不知道如果没有启用该钩子,它如何尝试执行该钩子。 如果以同样的方式失败,那么我会认为expandrive/macfuse系统没有正确地处理权限(但这不太可能)。

        2
  •  1
  •   Marc Charbonneau    17 年前

    我最终在笔记本电脑上设置了一个本地开发环境,我放弃了通过Expandrive使用Git的尝试。在花了更多的时间之后,这些工具似乎并不打算一起工作。

        3
  •  1
  •   Jade    17 年前

    我相信Git的最新版本使用的机制不同于权限来启用挂钩。因此,如果您使用的是最新版本,那么您可以从.git/hooks目录中删除所有内容(或者将其移到其他地方),并查看这是否是问题所在。

        4
  •  0
  •   Jeroen Vermeulen    14 年前

    我也有同样的问题。我在单独的开发服务器(devserver)上开发和测试,而我的IDE(phpsorm)在我的MacBook上。我正在使用expandrive通过我的Mac上的sftp(ssh)安装devserver的webroot。当我尝试在Mac上使用Git时,我收到了有关sha1文件和其他内容的错误。

    我是这样解决的:

    我已经搬走了 .git 直接从已安装的驱动器进入 /Volumes/devserver 到我家里的某个地方,在我的MacBook上。在那之后,我把旧的位置和 Git 迪尔我不得不使用 ../../Users/jeroen/### 因为否则链接不正确。

    移动和制作符号链接的示例:

    cd  /Volumes/devserver
    mkdir -p /Users/$USER/Code/devserver
    mv .git /Users/$USER/Code/devserver/.git
    ln -s ../../Users/$USER/Code/devserver/.git ./git
    git status
    

    第一次使用“git”命令可能需要一段时间,因为git正在重建一些缓存。