我和我的同事有一个共享的网站回购。我们都在Windows 7 64位推送到Ubuntu 10.04。以下是我们的设置,以防有问题。
局地>毂 - >网站
我们推送到一个裸仓库的集线器,然后在集线器cds中的更新后挂钩到网站仓库,并将更改从集线器拉到网站。这样做是因为网站是实时的并且总是被检出并且无法推送到。
当我在我的本地并且我提交了一个新的文件夹/文件时,它使用100644的创建模式指出以下内容
$ git commit -a -m "testing permissions"
[master 865b809] testing permissions
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 test.php
当我将这些更改推送到repo时,它创建文件夹为755,文件为644,当我需要它们为775和664.只要我只编辑文件,权限至少保持不变。唯一的问题是创作。
在共享仓库中我们有core.sharedrepository = 0660
我认为它会根据需要设置权限。我们umask
中的.bashrc
也设置为002。
这是我的本地配置
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly
似乎我们的本地正在确定权限并忽略我们共享仓库上的设置。如何将创建模式设置为100664。
集线器配置
[core]
repositoryformatversion = 0
filemode = true
bare = true
sharedrepository = 0660
[receive]
denyNonFastforwards = true
网站配置
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
sharedrepository = 1
[receive]
denyNonFastforwards = true
正如Kalle Pokki在她的评论中指出的那样。这个问题是,当使用GIT并推送它时,它是非交互式运行的,所以我的umask设置不起作用。每次有人推动时,我都会更新我的回购后更新,以便将umask设置为0002
。
答案 0 :(得分:2)
据我所知,git不会在您想要的级别存储文件权限。拥有644或664个文件完全取决于umask。
core.sharedrepository只处理git数据库的文件权限,而不是存储在存储库中的文件的权限。
由于您已经有更新后的钩子来检查Web服务器中的存储库,我建议在那里添加一个chmod脚本。像
这样的东西find /path/to/website -type d | xargs chmod 775
find /path/to/website -type f | xargs chmod 664
编辑:我非常有信心你的ssh / git服务器有不同于你以交互方式登录时的umask。也许您应该在更新后挂钩的开头明确设置umask。请参阅以下内容,其中tmp分支中的附加文件“1”在主分支中不存在:
$ umask 0022
$ git checkout tmp
Switched to branch 'tmp'
$ ls -l 1
-rw-r--r-- 1 kp kp 5 2013-01-15 15:53 1
$ git checkout master
Switched to branch 'master'
$ umask 0002
$ git checkout tmp
Switched to branch 'tmp'
$ ls -l 1
-rw-rw-r-- 1 kp kp 5 2013-01-15 15:53 1
答案 1 :(得分:2)
这是由你的filemode = false
引起的参考http://www.gelato.unsw.edu.au/archives/git/0609/28190.html
如果filemode = 0,则在添加文件时忽略可执行位。
如果用户已配置core.filemode = 0,那么我们不应该设置 添加新文件作为用户时索引中的执行位 表示本地文件系统不可信任。
这意味着在添加应标记为可执行文件的文件时 在core.filemode = 0的存储库中,用户必须执行 提交之前文件上的'git update-index --chmod = + x' 此外。
签名:Shawn O. Pearce 签名:Junio C Hamano