Инструменты пользователя

Инструменты сайта



// git-svn: новый git репозиторий в существующий svn

Так сложилось, что в нашей компании используется SVN для внутренних нужд. Но делать локальные эксперименты, или вообще проверки, бранчевания и т.п. значительно удобнее используя git. Естественно и логично для индивидуальной работы использовать git-svn. В статье подробно рассмотрен вопрос экспорта своего нового проекта из git в svn с сохранением истории. Это случай, когда вы делаете локальный проект, отлаживаете его и, по результату, выкладываете в центральный SVN репозиторий.

Подкатом вольный пересказ при использовании стандартного размещения каталогов: ProjectName/{trunk,tags,branches}, для нестандартного - в статье.

// Luakit configs

Выложил свои конфиги для Luakit на Gitorious: https://www.gitorious.org/hatred-configs/luakit

Помимо небольших кастомизаций под себя:

  • цвета закладок
  • сохранение сессии по w, а открытие окна по wi
  • включено отображение полосы прокрутки

сделана подсистема URI Rewrite и в globals.lua показано, как можно её использовать:

  • globals –> uri_rewrite_enable [true/false] — включить или выключить URI Rewrite
  • список uri_rewrites позволяет указать, что и как заменять, в конфиге показано как там заполнять, чуть ниже показано как делать «синонимы» для доменов, что бы, к примеру, для сайта с и без www. в начеле, делать одинаковые замены.
  • горячая клавиша Shift-F5 - перечитать текущую страницу, используя URI Rewrite

Посмотреть изменения относительно оригинальных конфигов:

git diff master hatred

// Немного разного про 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) поместил следующий скрипт:

allow-web-access.sh
#!/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

Создал в рабочей копии конфигурации гитозиса файл:

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

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

// Пустые директории в GIT

На заметку, отсюда и отсюда, делается пустая директория /tmp:

$ mkdir tmp
$ touch tmp/.gitignore
$ git add tmp
$ echo '*' > tmp/.gitignore
$ git commit -m 'Empty directory' tmp

Основной нюанс: добавить .gitignore раньше, чем вписать туда игнорировать ВСЕ файлы

// Несколько заметок по работе с Gitorious.org

Сам проект - git-хостинг. Там же хостятся проекты Qt (http://blog.gitorious.org/2009/05/11/welcome-qt/, http://qt.gitorious.org/), Qt Creator (http://qt.gitorious.org/qt-creator).

  1. регистрируемся, но, т.к. это не рашин стартап, поддерживается и вход по OpenID, что мне очень удобно и вкусно.
  2. при помощи ssh-keygen сгенерируйте ключ:
    cd ~/.ssh
    ssh-keygen -f id_rsa_gitorious
      
  3. после в веб-морде: Your dashboard (вверху) → Manage SSH keys (в главной области окна) → Add SSH key (в колонке справа), вставить туда содержимое ~/.ssh/id_rsa_gitorious.pub и жмякнуть Save
  4. у себя же, создать файл ~/.ssh/config, в котором должно содержаться примерно следующее:
    Host gitorious.org
      IdentityFile ~/.ssh/id_rsa_gitorious
      

    что бы для сайты автоматом выбирался нужный ключ.

Теперь несколько заметок по работе.

  • заходим в нужный проект, выбираем репозиторий, в колонке справа появляется возможность клонировать репу. На ней делать изменения и потом комитить мерж-реквесты.
  • создать свой проект: Your dashboard → Create a new project… (колонка справа) дальше все понятно: задать нужные поля, выбрать лицензию и т.д.
  • в проекте можно создавать репозитории, находясь в проекте: Add repository… в колонке справа, после создания проекта, будут даны рекомендации, что нужно сделать, что бы залить его после (подготовительные шаги для ssh мы сделали выше)

Пока не существует возможности создать приватный репозиторий, но работа ведется: http://groups.google.com/group/gitorious/browse_thread/thread/af08be1e6dd70b95/614e96c2f886b7fb?lnk=gst&q=private#614e96c2f886b7fb

Из дополнительных плюшек: можно для проекта вики создавать, по сути нормальный такой сайт-хостер для исходников, при том, что из git по тегу можно выгребать tar.gz пакеты, не плодя лишние сущности.

Но, при создании проекта так же можно указывать и сайт и багтрекер, так что и как удобный вспомогательный механизм Gitourous тоже полезен. Есть удобные средства для ревью кода, при совместной разработке.

Сам код Gitorious хостится здесь же, можно скачать и развернуть подобную систему у себя. Для пользователей ArchLinux доступен через AUR: http://aur.archlinux.org/packages.php?ID=34713

И есть одно больше отличие от того же github.com (ещё я там не нашел вход по OpenID), это то, что место для пользователя нелимитировано, есть только одно ограничение: объем трафика в месяц не больше 500 Мб, но если нужно залить большой проект - все решается, вот ответ от создателя проекта:

I'm new one here and I want to ask about the space for repositories.
How much disk space is given for account?


As much as you need, with one big disclaimer; that you let us know
beforehand if plan on pushing any repositories larger than around
500MB, it's just nice behavior considering the freedom you have to let
us know first :)

Взято: http://groups.google.com/group/gitorious/browse_thread/thread/206efb9f1ea5f99b/a656b005f1e0ed80?lnk=gst&q=limit#a656b005f1e0ed80