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


July 6th, 2009 - 09:15
Еще одна полезная ссылка – правила хорошего тона при использовании git (http://evasive.ru/git_kung-fu.html)
July 7th, 2009 - 10:47
UPD: если в качестве IDE вы используете Netbeans, то имеет смысл добавить nbproject в .gitignore
August 23rd, 2009 - 15:14
Хороший пост.
Очень помогло.
Респект!
Илья Зыкин aka Killich