Pis*_*tos 88 git permissions share shared
我有一个现有的git repo(一个裸机),到目前为止只能由我写.我想打开一些UNIX用户组foo,这样foo的所有成员都可以推送它.我知道我可以轻松地设置一个新的 git repo:
git init --bare --shared=group repodir
chgrp -R foo repodir
Run Code Online (Sandbox Code Playgroud)
但我需要现有 repo目录的等效操作.
Dav*_*ill 104
尝试此操作以使repodir组中的用户可以使用现有存储库foo:
chgrp -R foo repodir # set the group
chmod -R g+rw repodir # allow the group to read/write
chmod g+s `find repodir -type d` # new files get group id of directory
git init --bare --shared=all repodir # sets some important variables in repodir/config ("core.sharedRepository=2" and "receive.denyNonFastforwards=true")
Run Code Online (Sandbox Code Playgroud)
kix*_*orz 44
在repo目录中执行以下命令:
git config core.sharedRepository group
chgrp -R foo repodir
chmod -R g+w repodir
Run Code Online (Sandbox Code Playgroud)
编辑:为了解决经常混淆,group是一个实际的关键字,你不应该用组的名称替换它.
And*_*rea 39
合并@David Underhill和@kixorz的答案,我制定了自己的(明确的)解决方案.
这是裸露的回购和非裸回购.它们之间只有很小的差异,但这种方式更清晰.
BARE REPOSITORY
cd <repo.git>/ # Enter inside the git repo
git config core.sharedRepository group # Update the git's config
chgrp -R <group-name> . # Change files and directories' group
chmod -R g+w . # Change permissions
chmod g-w objects/pack/* # Git pack files should be immutable
find -type d -exec chmod g+s {} + # New files get directory's group id
Run Code Online (Sandbox Code Playgroud)
哪里:
<repo.git>是裸存储库目录,通常在服务器上(例如my_project.git/).<group-name>是git用户的组名(例如用户).非抢劫储藏室
cd <project_dir>/ # Enter inside the project directory
git config core.sharedRepository group # Update the git's config
chgrp -R <group-name> . # Change files and directories' group
chmod -R g+w . # Change permissions
chmod g-w .git/objects/pack/* # Git pack files should be immutable
find -type d -exec chmod g+s {} + # New files get directory's group id
Run Code Online (Sandbox Code Playgroud)
哪里:
<project_dir>是包含该.git文件夹的项目目录.<group-name>是git用户的组名(例如用户).