Код отслеживания Google Analytics.

Oct 9, 2013

git server для маленькой такой компании - gitolite

Если нужен git-server для небольшой компании разработчиков или вообще "для маленькой такой компании", то вполне можно настроить его как описано здесь. Однако, такой сервер будет предоставлять всем равные права на чтение и запись. Так что, если необходимо как-то ограничивать доступ к репозитарию, например, давать права только на чтение, то, возможно, имеет смысл посмотреть на gitolite.
Документацию по gitolite можно найти здесь, а я просто приведу свою чуть модифицированную шпаргалку. С момента написания первой версии поста, многое изменилось. Например, dsa формат признан устаревшим для ключей и рекомендуется использовать rsa или ed25519. Так же появился gitolite3, который так же рекомендован вместо gitolite. Статья исправлена в соотвествии с этими и другими изменениями.
Итак предположим у нас есть ssh доступ на машину, где мы хотим поднять git server (<user> и <server>). Так же у нас есть наша машина с которой мы будем администрировать gitolite (<admin>) и на ней установлен git. Все машины под управлением Ubuntu.
Для начала нам потребуются ключи. Если их нет, то сгенерируем их:

<admin>$ssh-keygen -t ed25519


Начнем установку gitolite(вариант для Ubuntu и Debian):

<server>$ sudo apt install gitolite3
В процессе установки gitolite3 запросит у нас либо файл с публичным ключом, либо его содержимое - я просто скопировал содержимое.

Далее возвращаемся на <admin>:

<admin>$ git clone gitolite3@<server>:gitolite-admin
<admin>$ cd gitolite-admin
<admin>$ vim conf/gitolite.conf

Например, можно написать следующий "конфиг":

@videosite_staff = admin ns
repo gitolite-admin
    RW+ = admin

repo testing
    RW+ = @all

repo videosite
    RW+ = @videosite_staff

Т.е. в нем объявлено, что к репозиторию gitolite-admin имеет доступ только пользователь admin, к testing - все, а к videosite - только группа @videosite_staff, к которой на данный момент относятся admin и ns. Права могут быть:
  • R - только чтение
  • RW - чтение добавление коммитов, запрещен rewind (push --force)
  • RW+ - полный доступ
  • RWC - возможность создавать ветку
  • RWD - возможность удалять ветку
  • - запретить запись
Как gitolite различает пользователей? По ключам. Так что пользователю ns нужно создать свой ключ. Положим его в keydir/ns.pub - важно чтобы имя файла было таким же как и имя пользователя в конфиге, но с расширением .pub

<admin>$ git add keydir/ns.pub
<admin>$ git commit -am "video site repository is added"
<admin>$ git push origin master

Мы немного здесь оптимизировали настройку - одновременно положили конфигурацию доступа и добавили пользователя.
Все что нам осталось - это начать работать. gitolite обнаружил, что даны permissions на новый проект и создал его. Так что становимся пользователем ns, клонируем репозиторий и вперед:

<ns_host>$ git clone git@<server>:videosite.git
<
ns_host> cd videosite
...

No comments: