如何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用户