Как настроить существующее Git-репо для совместного использования группой UNIX - PullRequest
86 голосов
/ 14 июля 2010

У меня есть существующее git-репо (голое), которое до этого момента было доступно для записи только мне.Я хочу открыть его для некоторой группы пользователей UNIX, foo, чтобы все члены foo могли перейти к нему.Я знаю, что могу легко настроить новое git репо с:

git init --bare --shared=group repodir
chgrp -R foo repodir

Но мне нужна эквивалентная операция для существующего каталога репо.1008 *

Ответы [ 5 ]

102 голосов
/ 14 июля 2010

Попробуйте сделать так, чтобы существующий репозиторий в 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")
44 голосов
/ 02 марта 2012

В директории репо выполните следующие команды:

git config core.sharedRepository group
chgrp -R foo repodir
chmod -R g+w repodir

Редактировать: для устранения частой путаницы, group - это ключевое слово, его нельзя заменять именем группы.

38 голосов
/ 15 апреля 2015

Слияние @ David Underhill и @ kixorz ответов, я сделал свое собственное (окончательное) решение.

Это для голых репозиториеви non-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 g-w 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 (например, users ).

НЕЗЕМНОЕ ХРАНИЛИЩЕ

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

где:

  • <project_dir> - каталог проекта, содержащий .gitпапка.
  • <group-name> - это имя группы для пользователей git (например, users ).
3 голосов
/ 19 января 2015

Это, вероятно, не обязательно, но стоит отметить, что git init --bare --shared также устанавливает параметр denyNonFastForwards .

git config receive.denyNonFastForwards true

Значение этого параметра следующее:

receive.denyNonFastForwards

Если вы перебазируете коммиты, которые вы уже выдвинули, и затем попытаетесь отжать снова, или иным образом попытаетесь выдвинуть коммит в удаленную ветку, которая не содержитПодтвердите, что удаленная ветвь в данный момент указывает, вам будет отказано.Это вообще хорошая политика;но в случае ребазирования вы можете определить, что знаете, что делаете, и можете принудительно обновить удаленную ветку с помощью флага -f для вашей команды push.

(из http://git -scm.com / книга / ен / v2 / Customizing-Гит-Гит-конфигурации )

1 голос
/ 18 апреля 2016

В дополнение к приведенным выше ответам о разрешении группе на чтение / запись вам также необходимо добавить пользователя в группу (скажем, «foo»).

sudo usermod -a -G [groupname] [username]

Примечание: сначала вам нужно будет создать пользователя, если он не существует

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...