post-receive hook - 如果传入文件类型为* .cgi,则将权限设置为755

时间:2014-04-27 23:14:41

标签: git githooks

每次在本地修改* .cgi文件时,推送到该远程服务器后,远程服务器上的755权限将被删除。最好使用post-receive钩子中的附加代码处理,例如, - 如果文件类型为* .cgi,则将权限设置为755.或者,是否有更好的方法来处理此问题?如果后接收挂钩中的一些额外的代码行将完成这项工作,那么我们将非常感谢一个例子。

#!/bin/sh
GIT_WORK_TREE=/home/lawlist git checkout -f

编辑(2014年4月27日):我发现通过在推送到远程服务器(Linux)之前在本地计算机(OSX盒)上设置所需权限,权限是在远程服务器上相应地设置。这可能是问题的可接受答案,但也可能存在用户可能不希望在本地计算机上设置权限的情况,因此我将更多地考虑这一点并检查一些bash / shell代码在我发布答案之前,可以与post-receive挂钩一起使用。实质上,bash / shell脚本需要查看文件是否已存在以及已分配了哪些权限,并在更新的推送发生后恢复这些权限。

3 个答案:

答案 0 :(得分:2)

如果您的目标是使用本地计算机管理远程服务器上的权限,那么mockinterface和patthoyts的答案都是有效的。

重要的是要指出post-receive挂钩是事先写好并考虑某些预期条件。毫无疑问会出现现有post-receive钩子未考虑的独特情况,需要使用另一种方法。

如果您在两个位置(即远程和本地)都需要755个权限,那么在推送之前在本地设置权限就足够了。

如果您希望在两个位置(即远程和本地)获得不同的权限,那么您将需要使用此线程中其他人建议的方法之一。

答案 1 :(得分:1)

Git不会广泛跟踪文件权限,因为它是为了跨内容而不是文件,跨不同的用户权限和组设置,不同的计算机和不同的操作系统进行协作而构建的。以上所有基本概念都是:普通文件,可执行文件,(符号)链接和文件夹。

您应该管理每个存储库的权限,并且在钩子中管理权限当然是有效的。但是,我不想自己管理权限,而是将注意力集中在各种 git-cache-meta 实现上,通常基于this thread中的原始建议。

你可以找到它present many times on github,通常它们涉及到运行,

$ git-cache-meta --store  # create a .git_cache_meta file to store permissions

和其他地方,

$ git-cache-meta --aply  # to apply the permissions from a .git_cache_meta file

您可以修改.git_cache_meta文件,仅提及您感兴趣的文件。请考虑使用这种稍微更标准的方法。

答案 2 :(得分:1)

git update-index --chmod +x filepath将在暂存树中对此文件的git权限进行更改。这适用于Windows和unix。结果如下所示,需要提交。它正在进行更改,而不是将文件更改暂存到内容中。

$ git update-index --chmod +x z

$ git diff --cached
diff --git a/z b/z
old mode 100644
new mode 100755

您可以在本地添加预提交,以确保您的提交始终使用update-index命令在.cgi文件上设置可执行位。