use*_*421 5 git permissions gitolite
将文件推送到我们的服务器后,将执行以下 post-receive 挂钩:
#!/bin/sh
export GIT_WORK_TREE=/home/user/www/
git checkout -f
Run Code Online (Sandbox Code Playgroud)
但是,文件在结帐时获得了非常奇怪的600权限和文件夹700。这不是我所期望的(在我们的其他服务器上,我们得到644和755)。从这个线程我了解到 git 没有设置权限,所以 git 不应该受到责备。我的问题是:什么是?我怎样才能弄清楚这个问题的原因是什么?
我已经通过在结帐时运行额外的脚本来修复权限来暂时解决它,但我有兴趣解决根本原因。
我正在使用 gitolite 来管理存储库,但我怀疑这是原因。但同样,我很高兴知道我可以从哪里开始,因为此时我不确定如何调查。
根据最初的答案,我查看了服务器上的 umask 设置。该git用户(这是用来上传文件的用户),umask设置为0002。这在下面的练习证实:
git@server:~$ umask
0002
git@server:~$ touch newfile
git@server:~$ ls -la newfile
-rw-rw-r-- 1 git git 0 Aug 5 10:46 newfile
Run Code Online (Sandbox Code Playgroud)
额外细节:
然而,文件在签出时获得了非常奇怪的 600 权限,而文件夹则获得了 700 权限。
看起来您的 shell 可能有一个限制性的 umask 设置umask 0177。
从这个线程我了解到 git 没有设置权限,所以 git 不应该受到责备。
不,这是umask你的 shell 的设置。
我的问题是:[...][如何]我怎样才能找出这个问题的原因是什么?
运行umask,它会告诉你当前的设置是什么。好像是0177或者类似。如果您想知道原因,您需要查看 所使用的 rc 文件/bin/sh(很可能.profile是 或 ).bashrc以及其他来源的文件。
您可以有非常严格的umask设置,但可以通过按照 @VonC 建议添加一行来在脚本中覆盖它们umask。