Hatred's Log Place

DON'T PANIC!

Dec 8, 2010 - 2 minute read -

Немного разного про Git

Несколько вопросов про 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

На будущее - автоматизировать эту операцию через конфигурацию гитозиса.

Tags: collaborate git

Java Enums Boost.Signals и Qt4

comments powered by Disqus