Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在远程主机上工作时发生Git提交权限错误_Git_Unix_Permissions - Fatal编程技术网

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

在远程主机上工作时发生Git提交权限错误,git,unix,permissions,Git,Unix,Permissions,我正在努力使我的网站处于版本控制之下。我使用ExpanDrive直接在服务器上工作,它使用MacFUSE将SFTP连接安装为本地卷,我可以通过终端和其他本地应用程序访问该卷 无论如何,在我尝试提交之前,一切都进展顺利,当我收到以下消息时: fatal: exec .git/hooks/pre-commit failed. 如果我尝试手动运行exec命令,我会看到: -bash: /Volumes/1&1 Internet/website/.git/hooks/pre-commit: P

我正在努力使我的网站处于版本控制之下。我使用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)权限,但仍然没有成功。有人知道我还可以尝试什么吗?

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

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

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

我在笔记本电脑上建立了一个本地开发环境,我放弃了通过ExpanDrive使用git。在花了更多的时间使用它之后,这些工具似乎无法协同工作。

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

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

我是这样解决的:

我已将
.git
目录从
/Volumes/devserver
中装入的驱动器移动到Macbook上my home目录中的某个位置。然后,我将旧位置符号链接到
.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正在重建一些缓存。

谢谢你的建议,不幸的是,在尝试了这个命令之后,我仍然看到了错误。我想我的大脑已经在去机场的路上了,那时我的手指还在键盘上。显然,重置权限只会让你回到原来的问题所在。不幸的是,我遇到了问题,甚至没有验证,现在我在新的repo中添加文件时出错。我放弃了这一点。在mac上,我只使用Fuse,git在那里工作得很有魅力。另一方面,在windows上,我一直在尝试Expandrive,但我得到了权限错误。