使用git post merge修复权限

使用git post merge修复权限,git,permissions,merge,githooks,Git,Permissions,Merge,Githooks,在我工作的一台服务器上,我们必须以root用户身份登录(由于某些原因,我将不在这里介绍)。我们设置了一个用于web服务器的git存储库,但由于文件是以根用户身份创建的,因此git修改的文件具有错误的权限 我创建了一个非常简单的post-merge钩子,我认为它可以解决这个问题 #!/bin/bash . git-sh-setup chown -R www-data:www-data $GIT_DIR 我使用执行权限将此文件放入.git/hooks/post merge,但该文件似乎从未运行过。

在我工作的一台服务器上,我们必须以root用户身份登录(由于某些原因,我将不在这里介绍)。我们设置了一个用于web服务器的git存储库,但由于文件是以根用户身份创建的,因此git修改的文件具有错误的权限

我创建了一个非常简单的post-merge钩子,我认为它可以解决这个问题

#!/bin/bash
. git-sh-setup
chown -R www-data:www-data $GIT_DIR
我使用执行权限将此文件放入
.git/hooks/post merge
,但该文件似乎从未运行过。这是我第一次尝试设置钩子,所以可能我遗漏了一些明显的东西

我注意到的一点是,大多数钩子都有一个
.sample
文件,而post-merge没有。(git版本1.7.4)


提前谢谢

确保将脚本添加到超级用户组所有权

如果希望脚本执行远程存储库被推送到的操作,可能您正在查找。

您可能已经知道,但可能需要检查合并后挂钩中的下线字符(CRs)。这也许可以解释为什么钩子没有执行(正如在另一个问题中提到的)

如果这不是解决方案,您还可以考虑另一种解决问题的方法。当存储库中的文件在服务器上发生更改时,您可以执行一项任务来对目录执行所有者更改。Cron任务本身不会根据文件系统的更改作出反应,但您可以尝试使用类似于c在服务器的git存储库中更改任何更改

我希望这两条信息能解决你的问题,或者至少能让你更亲近。祝你好运。

看看“git成就”的方式有效。将git封装在脚本中并在任何命令下执行所需操作都会更容易。挂钩更多地是为远程回购而不是本地回购设计的。合并是在本地执行的操作,因此您不会从挂钩机制中找到太多帮助

链接:


希望这有帮助

您是否尝试添加一个
echo
或编写一个
tmp
文件以确保它没有运行?为什么是
post merge
(在git pull上)而不是
post receive
(在
git push
)?如果您没有直接在服务器上执行
git pull
,那么这个特定的钩子(
post merge
)将无法运行。
.git sh setup
行应该做什么?我确实尝试编写了一个临时文件。它似乎没有被执行。我直接在服务器上执行拉操作。我的理解是,git sh setup准备了必要的环境变量。您可以发布拉操作时使用的实际命令吗(并希望脚本能够运行)?它不是在我拉的时候,而是在我合并的时候。例如,
git merge origin/feature branch
。理想情况下,我也希望这个钩子与
git reset
一起运行。实际上,每当git触及这个目录中的任何文件时,我都希望运行钩子。脚本是以root创建的。不,我希望使用合并后钩子。没错,inotify是有效的k、 看起来没有更好的方法。为什么会这么混乱?Git是为了编写脚本而设计的。事实上,您使用的大多数Git命令实际上都是bash脚本。不要试图通过使用钩子来修复这个问题,从而将圆钉嵌入方孔中。合并是工作树中的工作重点。脚本是您的爱好。如果钩子起作用,那么正如我所期望的,我的解决方案将是一个两行,也许三行的shell脚本。为git编写包装器,虽然可能仍然相当简单,但至少要复杂一个数量级。