tig

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


