C4 always sleepy

24Aug/092

tig

tig
tig - полезный инструмент для тех кто пользуется git. Это git-клиент, работающий из коммандной строки и имеющий все необходимые функции для работы с вашими репозитариями. Устанавливается
в Ubuntu: sudo apt-get install tig
в Mac OsX: sudo port install tig (при условии установленных MacPorts)

10Aug/092

Используем braid для RoR-приложения

Еще одним полезным инструментом для RoR-разработчика можно назвать braid. С помощью этой утилиты можно сильно облегчить свою жизнь, контроллируя внешние git- и svn-репозитарии, которыми могут например являться плагины и edge rails. Все внешние репозитарии также прописываются в git-конфиге как submodules.
Все необходимое для работы детально описано в wiki проекта, поэтому я вкратце пробегусь по основным командам:

$ braid add git://github.com/rails/rails.git vendor/rails

- cтавим edge rails

$ braid add -p git://github.com/mbleigh/seed-fu.git

- добавление rails-плагина

$ braid add -p http://xss-shield.googlecode.com/svn/trunk/xss-shield/

- добавление плагина из svn-репозитария

$ braid add -p --type svn http://xss-shield.googlecode.com/svn/trunk/xss-shield/

- добавление плагина из svn-репозитария, но уже с прямым указанием, что это svn-репозитарий

$ braid update

- обновляем все установленные submodules

$ braid update vendor/plugins/cache_fu

- обновляем cache_fu

$ braid diff vendor/rails 

- просмотр локально сделанных изменений

Если вами внесены изменения в код и вы пытаетесь сделать update - процесс обновления остановится, чтобы вы могли разрешить конфликт между локальным и удаленным репозитариями. Далее просто делаем

$ git commit

Чтобы откатить изменения

$ git reset --hard

В принципе на первое время этого достаточно :) Если вым чего-то не будет хватать для работы - добро пожаловать в wiki.

PS: не забывайте, что файл .gitignore не должен содержать в себе записей типа .*, которые запрещали бы отслеживание файла .braids

27Jul/099

Настраиваем git-сервер с использованием gitosis

В связи с переходом на git у меня появилась необходимость настроить центральный git-репозитарий для всех проектов. Для этой цели я решил использовать gitosis - удобное средство, позволяющее управлять репозитариями, используя всего один пользовательский аккаунт, управляя доступом пользователей к репозитариям на основе ssh-ключей. В этом туториале я постараюсь рассказать по шагам как это сделать. Так как я использую Ubuntu Server на linode.com все материалы будут относиться именно к этой системе. В принципе - настройка на других системах (FreeBSD, Windows итд) будут не сильно отличаться от описанных ниже, единственное надо будет учитывать нюансы соответствующих систем.

Предусловие - у вас должен быть уже установлен git. Если вы этого еще не сделали - самое время выполнить из консоли

$ sudo apt-get install git-core

Мне не удалось найти gitosis в списке доступных приложений в менеджере пакетов, поэтому установку пришлось делать из исходников

$ cd ~/src
$ git clone git://eagain.net/gitosis.git
$ cd gitosis
$ python setup.py install

Также необходимы python и python-setuptools. О необходимости установки вам могут сказать сообщения

-bash: python: command not found

или соответственно

Traceback (most recent call last):
  File "setup.py", line 2, in ?
    from setuptools import setup, find_packages
ImportError: No module named setuptools

Установить setuptools можно с помощью

$ sudo apt-get install python-setuptools

Следующим шагом добавим пользователя, который будет владельцем репозитариев. Пользователь не должен иметь возможности для логина, но шелл ему нужен корректный - иначе gitosis не будет работать.

sudo adduser \
    --system \
    --shell /bin/sh \
    --gecos 'git version control' \
    --group \
    --disabled-password \
    --home /home/git \
    git

Теперь необходимо сгенерировать ssh ключ для пользователя, который будет конфигурировать репозитарий. Да-да - именно репозитарий с настройками :) Дело в том, что gitosis хранит все свои настройки в отдельном репозитарии и в любой момент можно отследить историю внесенных в них изменений.

$ ssh-keygen -t rsa

В принципе - вы можете сгенерировать ключ как на самом сервере, так и на своей рабочей машине и залить ключ используя scp. Сейчас нас интересует публичный ключ, который находится в $HOME/.ssh/id_rsa.pub

Теперь создадим репозитарий с настройками и добавим наш ключ

$ sudo -H -u git gitosis-init <  /tmp/id_rsa.pub

Давайте приступим к настройкам.

$ git clone git@YOUR_SERVER:gitosis-admin.git
$ cd gitosis-admin
$ vi gitosis.conf

Итак, давайте посмотрим что же у нас в файле gitosis.conf

[gitosis]                  

[group gitosis-admin]
writable = gitosis-admin
members = you@yourhost

Как вы видите - сейчас имеется группа gitosis-admin, в которую добавлены вы с правами редактирования репозитария с конфигурацией. Давайте создадим еще один проект и добавим нового пользователя developer@remotehost c правами на запись. Для этого немного отредактируем наш конфиг:

[gitosis]                  

[group gitosis-admin]
writable = gitosis-admin
members = you@yourhost

[group prj1]
writable = project1
members = you@yourhost developer@remotehost

Как видите - ничего сложного :) Закачиваем ssh-ключ нового пользователя в keydir, имена пользователей разделяем пробелом (заметьте - расширение .pub в конфиге не указываем), сохраняем конфиг и коммитим изменения

$ git commit -am "Granted access for developer@remotehost to project1"
$ git push

Ок, изменения в конфиг мы внесли, но где же сам репозитарий? Он должен находиться в /home/git/repositories/, поэтому иы делаем следующее:

$ cd /home/git/repositories
$ mkdir project1.git
$ git init project1.git
$ chown -R git:git project1.git

Ну вот в принципе и все что нам требовалось знать для настройки gitosis. В принципе если посмотреть файл ~/src/gitosis/example.conf - то можно найти еще пару нюансов настройки.

6Jul/090

Rails Magazine #3

Вышел новый выпуск электронного журнала Rails Magazine.

В номере:
* Create a code snippet app
* Working on a typical Open Source Rails project
* Theme Support
* Observer and Singleton design patterns
* JRuby monitoring with JMX
* Ruby Web Frameworks: A Dive into Waves
* How to Implement Automated Testing
* Ruby on Rails & Flex
* Workflow solutions with AASM

Chris Wanstrath (founder of Github) shares his learnings in building a successful business with Open Source.

Interviews with Carl Mercier, Ilya Grigorik and Ryan Singer.

2Jun/093

Ruby on Rails – переходим на git.

Все большую популярность набирает git, но к сожалению существует очень мало русскоязычной документации и начинающему пользоваться этой VCS приходится потратить значительное количество времени чтобы разобраться в нюансах. Я с подачи Толи Михайлова решил разобраться с git'ом и по мере своих скромных сил постараюсь облегчить читателям блога изучение этой системы контроля версий.

Начну я пожалуй с самой типичной задачи - использование git для Ruby On Rails приложений.

Первым делом поставим сам git. Для пользователей linux/bsd-систем проблем с установкой быть не должно - обычно они умеют пользоваться менеджерами пакетов, в Mac os x можно воспользоваться macports, для windows есть msysgit и TortoiseGit.

Кстати, для пользователей MacOS X есть замечательное приложение GitX - рекомендую к использованию :)

Далее - создаем репозитарий локально или на сервере.

# cd /projectpath/RailsOnGit
# git init

В принципе, если у вас проект уже находится под версионным контролем в git - можно просто скопировать его на сервер (или на локальный ресурс). В качестве git-репозитария для open-source проектов можно использовать github.

Идентифицируем себя для всех проектов

$ git config --global user.name "Your Name"
$ git config --global user.email "your@email.ru"

В принципе мы можем настроить идентификацию для каждого проекта отдельно, отредактировав файл $PROJECT_NAME/.git/config и вписав в него соответствующие строки.

Создадим наш проект

$ rails RailsOnGit
$ cd RailsOnGit

и инициализируем локальный репозитарий, а заодно создадим database.yml.example для того, чтобы не хранить актуальный database.yml с продуктивными паролями в репозитарии.

$ git init
$ cp database.yml database.yml.example

Удалим все ненужное путём создания файла .gitignore

$ touch .gitignore

и добавлением в него строк

db/schema.rb
db/schema.sql
db/*.sqlite3
config/database.yml
log/*
tmp/**/*

Теперь добавим проект в локальный репозитарий (не забываем, что в git имеется как локальный, так и удаленный репозитарии) и сделаем в него коммит

$ git add .
$ git commit -m "Initial import"

Добавим удаленный репозитарий

$ git remote add remote_rep_name remote_rep:/path

и отправим в него наши изменения (основную ветку - master)

$ git remote push remote_rep master

Теперь можно начинать работу с проектом. Вы можете создать отдельную ветку (branch) и коммитить все свои изменения в нее. Например создадим branch с названием edge и сделаем его активным

$ git branch edge
$ git checkout edge

Продолжаем работать с edge как с обычным репозитарием - вносим изменения, коммитим итд. Посмотреть лог изменений можно с помощью

$ git log

Если вы хотите опубликовать изменения для общего доступа, то необходимо объединить ветки edge и master. Первым делом давайте проверим - не внес ли кто-нибудь изменения в центральный репозитарий

$ git checkout master
$ git pull remote_rep master

При необходимости вносим исправления и приступим к слиянию master и edge

$ git merge edge

на всякий случай еще раз проверим - не обновился ли центральный репозитарий

$ git pull remote_rep master

после чего - отправим туда наши изменения

$ git push remote_rep master

если есть желание - можно поставить тэг на наш коммит

$ git tag "v1.0"

Вы можете ставить плагины для вашего приложения как модули (аналог svn:externals)

$ git submodule add git://github.com/mendable/correct-format.git vendor/plugins/correct-format
$ git commit -am "add correct-format plugin"

Вот наверно и все для начала. При желании - можно расширить свои познания по ссылкам ниже.

Полезные ссылки:
Git community book
Git Guts
Why git is better than X
Git cheatsheat 1
Git cheatsheat 2
Git cheatsheat 3 (by github team)
Git+Capistrano tutorial