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

时间:2009-04-18 18:59:59

标签: git unix permissions

我正在尝试将我的网站置于版本控制之下。我使用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 个答案:

答案 0 :(得分:3)

通过授予.git目录下的所有权限(777)权限,您已启用.git / hooks中随Git一起提供的所有示例脚本,通常将其执行位关闭。当您尝试commit时,现在可执行的示例预提交脚本会尝试运行以将提交格式化为修补程序。

除非你正在尝试这样做,否则我建议你chmod / git / hooks / *到644,这样钩子脚本就不会执行了。

编辑 - 重置挂钩权限可以让您回到首先遇到问题的情况。 接下来尝试使用--no-verify标志进行提交,该标志应该绕过预提交挂钩(以及对提交消息的一些次要检查)。这可能是一种解决方法,但我仍然不明白为什么你遇到了初始问题。代码看起来非常简单 - 如果没有启用它,我看不出它如何尝试执行该钩子。 如果以同样的方式失败,那么我认为ExpanDrive / MacFuse系统没有正确处理权限(但这不太可能)。

答案 1 :(得分:1)

我最终在我的笔记本电脑上设置了本地开发环境,我放弃尝试通过ExpanDrive使用git。在花了一些时间之后,似乎这些工具并不意味着能够一起工作。

答案 2 :(得分:1)

我相信最新版本的git使用的机制与启用钩子的权限不同。因此,如果您使用的是最新版本,则可以从.git / hooks目录中删除所有内容(或将其移动到其他位置),然后查看是否存在问题。

答案 3 :(得分:0)

我遇到了同样的问题。我正在开发和测试一个单独的开发服务器(devserver),而我的IDE(PhpStorm)在我的Macbook上。我正在使用ExpanDrive通过我的Mac上的SFTP(SSH)安装devserver的webroot。当我尝试在Mac上使用Git时,我收到了有关SHA1文件和其他内容的错误。

我已经这样解决了:

我已将.git dir从/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正在重建一些缓存。