gpt4 book ai didi

git - 是什么导致 git 的 post-receive umask 与用户的 umask 不同?

转载 作者:太空狗 更新时间:2023-10-29 13:37:25 25 4
gpt4 key购买 nike

经过一些挖掘和帮助后 from other people ,我发现我在 git 中的 umask 设置有问题。我想要实现的是在我的服务器上 check out 的任何 git repo,umask 设置默认为 0002。我不想在每个接收后 Hook 中都配置它... 我希望这是默认的 umask。我该如何实现?

我的存储库是通过使用服务器上的 git 用户登录到 ssh 来上传的。当我检查 umask 设置时,它已经设置为正确的设置:

root@server:~# su git 
git@server:~$ umask
0002

但是,如果我将 umask >/tmp/debug.log 放入我的接收后 Hook 中,那么该文件将显示 0077 的 umask!是什么导致这种情况不同?

根服务器也有相同的umask,但我无法弄清楚为什么在检查存储库时umask 不同。如果我更改为 git 用户并创建一个文件,那么一切正常:

git@server:~$ touch newfile
git@server:~$ ls -la
total 8
-rw-rw-r-- 1 git git 0 Aug 6 02:17 newfile
-rw------- 1 git git 0 Aug 6 02:16 post

newfile 是我刚刚创建的文件,post 文件是我通过git checkout 的文件,显然具有不同的权限。我还在 git 用户的 .bashrc 中添加了 umask,但没有用:

git@server:~$ cat ~/.bashrc 
export LANGUAGE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8"
export LC_TYPE="en_US.UTF-8"
umask 0002

为了物有所值,我使用 gitolite 来管理我的存储库。

这是我使用的接收后 Hook 脚本示例:

#!/bin/sh
export GIT_WORK_TREE=/home/user/www/
git checkout -f

最佳答案

您需要找到在非交互模式下从接收后 Hook 调用时 shell 使用的启动脚本。

如果你的钩子(Hook)脚本以#!/bin/sh开头,然后查看 man sh 并查找提及的 rcfiles,如 .profile/etc/profile.bashrc或类似的。使用的 shell 的手册页应该解释在交互式和非交互式 shell 的情况下哪些文件是来源的。您正在寻找在非交互模式下使用的文件。

如果手册页中仍然不清楚,您可以使用 namei/bin/sh 找到 /bin/sh 链接到的内容,然后使用 --help 运行命令。

为了验证您对启动序列中使用的脚本的理解,你可以在可疑的脚本文件中添加一些调试行,例如:

{ echo this is file x; umask; } >> /tmp/debug.log

然后触发接收后 Hook 并查看 /tmp/debug.log

关于git - 是什么导致 git 的 post-receive umask 与用户的 umask 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38801251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com