当将新文件夹/文件推送到共享仓库时,Git将创建模式设置为100664

时间:2013-01-14 19:26:02

标签: git

我和我的同事有一个共享的网站回购。我们都在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

EDIT2

正如Kalle Pokki在她的评论中指出的那样。这个问题是,当使用GIT并推送它时,它是非交互式运行的,所以我的umask设置不起作用。每次有人推动时,我都会更新我的回购后更新,以便将umask设置为0002

2 个答案:

答案 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