Несколько вопросов про Git внутри компании, такие как:
- миграция с mercurial (hg)
- организация совместного доступа, управление правами
- прикручивание к redmine
- организация анонимного ReadOnly доступа к отдельным репозиториям
Миграция с Mercurial
Тут не буду вдаваться в особые подробности, воспользовался этой статьёй: http://hedonismbot.wordpress.com/2008/10/16/hg-fast-export-convert-mercurial-repositories-to-git-repositories/, отработало, историю правок сохранила. Единственно, на ArchLinux пришлось пробежаться и заменить вызовы python на python2.
Организация совместного доступа
Вот тут интереснее, можно это делать на основе пользователей и групп в системе, но мне захотелось что бы был один аккаунт и там уже разруливалось кому что и где можно.
Нашел статью: http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way. Где собственно описывается решение на основе gitosis. Можно на просторах рунета найти перевод этой статьи на русский.
Из всего, что хотелось бы добавить: пользователей нужно в конфиге указывать как USER@HOST, иначе получите великий отлуп. Я на этом обжёгся. Решение мне не очень нравится, поэтому попробую раскурить как обойтись просто указанием USER.
Ну и как справка, сгенерировать ключик: ssh-keygen -f .ssh/$USER@$HOSTNAME
pub-часть отдать админу, что бы залил (кстати, так же через git) и прописал права. Private часть прописать для хоста с git, как - man ssh_config
Прикручивание к redmine
По умолчанию (у нас сервер с Debian) http сервер запущен с указанием группы www-data, тогда как репозитории git доступны на чтение/запись пользователю git и на чтение группе git. Вариант - добавить пользователя www-data в группу git, но не очень гибко. Я сделал следующим образом.
В корень домашней директории (/home/git) поместил следующий скрипт:
#!/bin/bash
cd /home/git
source .web-access.conf
cd repositories
# 1. pass
chown $git_user:$git_group *
# 2. pass
for repo in $repos
do
chown $git_user:$web_group $repo
done
В /etc/sudoers добавил следующую строчку: git ALL=NOPASSWD: /home/git/allow-web-access.sh
В хук /home/git/repositories/gitosis-admin.git/hooks/post-update добавил следующую строчку: sudo -u root /home/git/allow-web-access.sh
Сделал симлинк: ln -s /home/git/repositories/gitosis-admin.git/gitosis-export/web-access.conf /home/git/.web-access.conf
Создал в рабочей копии конфигурации гитозиса файл:
repos="repo1.git repo2.git"
git_user="git"
git_group="git"
web_group="www-data"
в repos указываются репозитории к которым разрешён доступ web-серверу. После чего, как обычно: git commit -a git push
Все нужные действия выполнятся автоматом.
В самом redmine указываем полные пути к репозиториям, типа: /home/git/repositories/repo1.git
Анонимный ReadOnly доступ к некоторым репозиториям
В статье про гитозис про это есть, там правда использована опция --export-all
, убираем её. Внутри директории репы, к которой нужен анонимный доступ, делаем файл git-daemon-export-ok:
touch git-daemon-export-ok
На будущее - автоматизировать эту операцию через конфигурацию гитозиса.