# coding: utf-8

1.3 Управление версиями с Git

Теперь, когда у нас есть новое и рабочее приложение Rails, мы займем одну минуту для шага, который, хотя технически необязателен, видится многим разработчиками Rails как фактически обязательный, а именно, размещение исходного кода нашего приложения под управление версиями. Системы управления версиями позволяют нам отслеживать изменения кода нашего проекта, облегчают совместную работу, и откатывать любые непреднамеренные погрешности (такие как случайное удаление файлов). Грамотное использование системы управления версиями - необходимый навык для каждого разработчика программного обеспечения.

Есть много возможностей для управления версиями, но сообщество Rails в значительной степени стандартизировано под Git, - распределенную систему управления версиями, первоначально разработанную Linus Torvalds, для размещения ядра Linux. Git – большая тема, и мы лишь слегка коснемся ее в этой книге, но есть много хороших бесплатных онлайн ресурсов; я особенно рекомендую Pro Git автора Scott Chacon (Apress, 2009). Размещение Вашего исходного кода под управление версиями с Git строго рекомендуется, не только потому, что это почти универсальная практика в мире Rails, но также и потому что это позволит Вам открыть доступ к Вашему коду более легко (Раздел 1.3.4) и развертнуть Ваше приложение прямо здесь в первой главе (Раздел 1.4).

1.3.1 Установка и настройка

Первый шаг это установка Git, если Вы еще не выполнили шаги в Разделе 1.2.2.2. (Как отмечено в том разделе, это подразумевает следование инструкциям в Installing Git разделе Pro Git.)

Первоначальная настройка системы

После установки Git следует выполнить ряд разовых настроек. Это системные настройки, что означает, что их необходимо сделать лишь единожды:

  $ git config --global user.name "Your Name"
  $ git config --global user.email [email protected]

Мне также нравится использовать co вместо более громоздкой checkout команды, мы можем сделать это следующим образом:

  $ git config --global alias.co checkout

Этот учебник будет обычно использовать полную checkout команду, которая работает на системах не имеющих co конфигурации, но в реальной жизни я почти всегда использую git co чтобы проверить (check out) проект.

В качестве финального шага установки, можно дополнительно установить редактор Git который будет использоваться для сообщений о фиксации (коммите). Если Вы используете графический редактор, такой как TextMate, gVim, или MacVim, Вы должны использовать флаг, чтобы быть уверенным, что редактор остается присоединенным к оболочке вместо того, чтобы отсоединиться сразу:18

  $ git config --global core.editor "mate -w"

Замените "mate -w" на "gvim -f" для gVim или "mvim -f" для MacVim.

Первоначальная настройка репозитария

Теперь мы подошли к нескольким шагам, которые будут необходимы каждый раз, когда Вы создаете новый репозитарий (что происходит единожды в этой книге, но, вероятно, когда-нибудь произойдет снова). Сначала перейдите в корневой каталог первого приложения и инициализируйте новый репозитарий:

  $ git init
  Initialized empty Git repository in /Users/mhartl/rails_projects/first_app/.git/

Следующий шаг добавит файлы проекта в репозитарий. Есть незначительная сложность: Git по умолчанию отслеживает изменения всех файлов, но есть несколько файлов, которые мы не хотели бы отслеживать. Например, Rails создает log файлы, для записи поведения приложения; эти файлы часто изменяются, и мы не хотим, чтобы наша система управления версиями постоянно обновляла их. у Git есть простой механизм, чтобы игнорировать такие файлы: просто включите файл, названный .gitignore в корневой каталог Rails с небольшим количеством правил, которые говорят Git какие файлы следует игнорировать.

Посмотрев снова в Таблицу 1.1, мы увидим, что команда rails создает дефолтный .gitignore файл в корневом каталоге Rails, похожий на показанный в Листинге 1.4.

Листинг 1.4. Дефолтный .gitignore создаваемый командой rails.
  .bundle
  db/*.sqlite3
  log/*.log
  tmp/**/*

Листинг 1.4 заставляет Git игноририровать такие файлы как log файлы, Rails временные (tmp) файлы, и базы данных SQLite. (Например, чтобы игнорировать log файлы, которые живут в log/ каталоге, мы используем log/*.log, чтобы игнорировать все файлы, заканчивающиеся на .log.) Большинство этих игнорируемых файлов изменяются часто и автоматически, так что включать их в управление версиями неудобно; кроме того, сотрудничая с другими файлами они могут вызвать конфликты.

.gitignore файл в Листинге 1.4 пожалуй, достаточен для этого учебного руководства, но, в зависимости от Вашей системы, можно обнаружить Листинг 1.5 более удобным.19 Этот увеличенный .gitignore обеспечивает игнорировние файлов документации Rails, файлов подкачки Vim и Emacs, и (для пользователей OS X) странные .DS_Store каталоги, создаваемые приложением Mac Finder. Если Вы хотите использовать этот более широкий набор игнорируемых файлов, откройте .gitignore в Вашем любимом текстовом редакторе и наполните его содержимым Листинга 1.5.

Листинг 1.5. Увеличенный .gitignore файл.
  .bundle
  db/*.sqlite3*
  log/*.log
  *.log
  /tmp/
  doc/
  *.swp
  *~
  .DS_Store
# coding: utf-8