У меня есть существующий репозиторий git (голый), который до этого момента был доступен для записи только мне. Я хочу открыть его для некоторой группы пользователей UNIX, foo, чтобы все члены foo могли нажимать на нее. Я знаю, что могу легко создать новое репозиторий git с помощью:
git init --bare --shared=group repodir
chgrp -R foo repodir
Но мне нужна эквивалентная операция для существующего каталога репо.
git
permissions
share
shared
Пистос
источник
источник
Ответы:
Попробуйте сделать так, чтобы существующий репозиторий
repodir
работал для пользователей в группеfoo
:источник
git init --shared
команду в существующем репо, чтобы установить значение конфигурации. Вам также необходимо выполнитьchmod
команду, чтобы получить права доступа к файлам.git pull
т. Д. Как root, а не какwww-data
владелец, и в результате вы получитеerror: insufficient permission for adding an object to repository database .git/objects
. Я думал, что исправил право собственности на все файлы / каталоги, которые были неправильными, используяfind
и-type d
/type -f
, но только этот метод избавился от ошибки (возможно, потому что файл в каком-то подкаталоге не мог быть записан группой?)core.sharedRepository
упоминается об этом - это кажется бесполезным, если пользователи не сделают все свои группы файлов доступными для записи.В каталоге репо выполните следующие команды:
Изменить: чтобы устранить частую путаницу,
group
это фактическое ключевое слово, вы не должны заменять его именем группы.источник
group
НЕ название группы :)git config core.sharedRepository dev
затем набравgit config
я получаюfatal: bad config value for 'core.sharedrepository' in .git/config
вgit version
1.7.0.4
(и , возможно , версии после)git config core.sharedRepository group
group
это не название группы, а реальное значение!Объединение @David Андерхиллы и @kixorz ответов, я сделал свое собственное (окончательное) решение.
Это для босых операции РЕПО и без оголенных РЕПО. Между ними есть лишь небольшие различия, но в этом смысле они более четкие.
ГОЛЫЙ ХРАНИЛИЩ
где:
<repo.git>
- это пустой каталог репозитория, обычно на сервере (напримерmy_project.git/
).<group-name>
это имя группы для пользователей git (например, пользователей ).НЕЗАГОЛЕННЫЙ РЕПОЗИТОРИЙ
где:
<project_dir>
- это каталог проекта, в котором находится.git
папка.<group-name>
это имя группы для пользователей git (например, пользователей ).источник
chmod g-w objects/pack/*
(если репозиторий не голый, добавьте.git/
)find . -type d
' вызывает ошибкуunable to execute /bin/chmod: Argument list too long
chmod g+s `find . -type d`
не масштабируется. Usefind -type d -exec chmod g+s {} +
chmod g-w objects/*/*
. Я не уверен насчет подкаталога info, поскольку он пуст для этого репо.Вероятно, в этом нет необходимости, но стоит отметить, что
git init --bare --shared
также устанавливается опция denyNonFastForwards .Смысл этой опции в следующем:
(из http://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration )
источник
В дополнение к приведенным выше ответам о разрешении группе читать / писать вам также необходимо добавить пользователя в группу (скажем, «foo»).
Примечание: вам нужно сначала создать пользователя, если он не существует
источник