每次在本地修改* .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
脚本需要查看文件是否已存在以及已分配了哪些权限,并在更新的推送发生后恢复这些权限。
答案 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文件上设置可执行位。