如何configuration现有的git仓库以供UNIX组共享
我有一个现有的git仓库(光秃秃的),到目前为止我只能写这个仓库。 我想打开它到一些UNIX用户组foo,以便foo的所有成员都可以推送到它。 我知道,我可以轻松地build立一个新的 git回购:
git init --bare --shared=group repodir chgrp -R foo repodir
但是我需要对现有的回购目录进行等效的操作。
尝试使用foo
组中的用户为repodir
工作创build一个现有的存储库:
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")
在回购目录中执行以下命令:
git config core.sharedRepository group chgrp -R foo repodir chmod -R g+w repodir
编辑:为了解决频繁的混淆, group
是一个实际的关键字,你不应该用组的名称来replace它。
合并@David Underhill和@kixorz的答案,我做了我自己的(明确的)解决scheme。
这是为了回收和非回收。 他们之间只有很小的差别,但是这样就更清楚了。
BARE纪念品
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 gw objects/pack/* # Git pack files should be immutable find -type d -exec chmod g+s {} + # New files get directory's group id
哪里:
-
<repo.git>
是裸仓库目录,通常在服务器上(例如my_project.git/
)。 -
<group-name>
是git用户(例如用户 )的组名。
非保pipe储存
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 gw .git/objects/pack/* # Git pack files should be immutable find -type d -exec chmod g+s {} + # New files get directory's group id
哪里:
-
<project_dir>
是包含.git
文件夹的项目目录。 -
<group-name>
是git用户(例如用户 )的组名。
这可能没有必要,但值得指出的是, git init --bare --shared
–shared也设置了denyNonFastForwards选项。
git config receive.denyNonFastForwards true
这个选项的含义如下:
receive.denyNonFastForwards
如果您重新提交已经推送的提交,然后尝试再次推送,或者尝试将提交推送到远程分支(不包含远程分支当前指向的提交)的远程分支,则会被拒绝。 这通常是很好的政策; 但是在rebase的情况下,您可能会确定您知道自己在做什么,并可以使用-f标志强制更新远程分支到您的push命令。
(来自http://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration )
除了上面允许一个组读/写的答案之外,你还需要将用户添加到组中(比如说“foo”)。
sudo usermod -a -G [groupname] [username]
注意:如果用户不存在,则必须先创build用户