我有用户fred
裸git仓库设置:setgid位未被git保存在`.git`文件夹中的新目录中?
/home/fred/foo.git
我已经在组中foo.git
每个文件设置为bar
:
$ chown -R fred:bar /home/fred/foo.git
(注意fred
不是组的成员bar
)
而且我已经为中的每个目录设置了setgid
位10:
$ find foo.git -type d -print0 | xargs -0 chmod g+s
然而,当fred
承诺的git仓库,该集团不保留一些文件。
具体表现在objects
目录我看到:
foo.git/objects:
drwxrws--- 46 fred bar 4096 Apr 7 23:43 .
drwxrws--- 7 fred bar 4096 Apr 6 17:12 ..
drwxrws--- 2 fred bar 4096 Apr 6 17:11 07
drwxrws--- 2 fred bar 4096 Apr 6 17:11 10
drwxrwx--- 2 fred bar 4096 Apr 7 22:14 14 <--- HERE
drwxrws--- 2 fred bar 4096 Apr 6 17:11 17
^--- HERE
注意,在objects/14
的setgid
位未设置。所以,因此,当一个新的对象被添加到该目录:
foo.git/objects/14:
drwxrwx--- 2 fred bar 4096 Apr 7 22:14 .
drwxrws--- 46 fred bar 4096 Apr 7 23:43 ..
-r--r----- 1 fred fred 2595 Apr 7 22:14 95482f8..9d6bfe21
所以现在95482..
文件没有组bar
,它有一群fred
。
我怀疑,当COMMITED fred
,混帐创建点播叫objects/14
举行新的对象,它这样做是为了某种未知的原因,setgid
位上的新14
目录没有设置时,一个新的目录,即使它的父目录objects
已设置setgid
位。
如果我尝试手动复制此:
$ su fred # as user fred
$ mkdir test1 # create test1 dir
$ sudo chgrp bar test1 # set group to bar
$ sudo chmod g+s test1 # set setgid bit
$ ls -l
drwxrwsr-x 2 fred bar 4096 Apr 8 21:33 test1
$ mkdir test1/test2 # create dir test1/test2
$ ls -l
drwxrwsr-x 2 fred bar 4096 Apr 8 21:35 test2
^--- HERE
发现新test1/test2
的setgid
位保存,所以当我...
$ touch test1/test2/test3
新文件仍然是按预期组bar
:
$ ls -l test1/test2
-rw-rw-r-- 1 fred bar 0 Apr 8 21:36 test3
为什么git
似乎在.git
目录中创建新目录时似乎保留setgid
位?
有一些我可以解决这个问题的git设置?或者你能解释是什么造成了这种情况?
我已经'core.sharedRepository = 0660'集。我无法更改它,因为我不希望该存储库具有世界可读性。使用'core.sharedRepositoy = 0660'观察描述的行为(不保留setgid位)。 – 2013-04-08 23:12:22
这不是(不希望的)设置文件和目录的'setgid'位吗? – 2013-04-08 23:21:21
有人实施它后多长时间,你认为这将需要笑声开始的嘲笑嚎叫?不,git的“愚蠢的内容跟踪器”等等,但我真的认为他在这方面使用这个词来表示其他意思。 – jthill 2013-04-08 23:26:05