ПРО GIT: Введение

января 30, 2011  |  Published in Development Processes, Управление Версиями  |  17 Comments

Git logo

Цикл статей ПРО GIT:
Введение
Ветки (бранчи)

1. Что есть Git

Git — это мощная и популярная система контроля версий. Git отслеживает изменения в коде програм и позволяет откатывать изменения назад в случае, если они привели к каким-либо ошибкам. Кроме того Git позволяет заниматься разработкой кода коллективно, используя, например, удаленный общий репозиторий, и когда каждый разработчик создает собственную ветку в которой работает, пока не выполнит определенную работу, а затем подмешивает изменения к общему репозиторию. Ранее при разработке ПО разработчикам приходилось делать откаты назад, для этого создавалась копия папки с исходными кодами. Git делает эту работу за вас, но вместо тупого копирования, он делает «снимки» () по которым можно восстановить оригинальный код после того, как в нем были произведены нежелаемые изменения.

2. Установка Git

2.1 Зависимости Git

Для нормальной работы с Git у вас должны быть установлены следующие библиотеки: curl, openssl и zlib

2.2. Установка Git из исходников:
Для установки GIT из исходников на операционные системы семейства UNIX, вам следует для начала скачать исходники, распаковать архив и выполнить следующие команды в консоли для установки:

$ make prefix=/usr all

или

$ make prefix=/usr install

2.3. Установка Git на Linux

Для установки Git на Ubuntu следует просто выполнить в консоли команду:

$ apt-get install git-core

2.4. Установка Git на OS X
Чтобы установить Git на OS X следует в консоли выполнить следущую команду:

$ sudo port install git-core

2.5. Установка Git на Windows
Для установки Git на Windows просто скачайте установочные файлы (http://code.google.com/p/msysgit/downloads/list) и выполните из них установку.

3. Настройка

После установки Git вам необходимо произвести совсем простую его настройку.

3.1. Устанавливаем имя пользователя и email
Сейчас вы столкнетесь со своей первой командой из Git — git config эта команда позволяет производить конфигурирование работы Git.

Устанавливаем имя пользователя:
$ git config --global user.name "Your Name"

Устанавливаем email пользователя:

$ git config --global user.email "your_email@whatever.com"

4. Создание первого проекта

4.1. Создание проекта Ruby on Rails
Проектом может являться любая папка в которой содержатся исходные коды ваших программ. Однако это не осначает, что git может использовать только в целях связанных с программированием, известны случаи, когда git использовался при написании книг и статей (но это скорей исключение). Кстати, некоторые программы используемые в различных издательствах имеют от части похожий функционал, который позволяет просмореть историю редактирования. Ладно, сейчас не об этом. Допустим, наш проект — это приложение на Ruby on Rails. Создаем проект Ruby on Rails:

$ rails new git_example

4.2. Создание репозитория
Теперь, когда у нас имеется папка с кодами нашего приложения, нам необходимо объявить ее репозиторием. Это необходимо для того, чтобы Git начал мониторинг за содержимым папки — файлами, в которых содержится код нашего проекта. Для того, чтобы объявить папку репозиторием в Git имеется специальная команда git init:

$ cd git_example
$ git init
Initialized empty Git repository in /home/vladimir/git_example/.git/

4.3. Добавление проекта на Ruby on Rails в Git репозиторий

Если мы воспользуемся сейчас командой git status, то мы увидем информацию о статусе репозитория, где содержимое нашего проекта будет помечено как «Untracked files«, то есть git еще не отслеживает изменения в этих файлах. Для того, чтобы заставить Git это делать, нам необходимо добавить наш проект на Ruby on Rails в репозиторий:

$ git add .

Теперь выполнив команду git status мы увидим все файлы составляющие наш проект с метками «new file», наконец то Git принялся отслеживать изменения в нашем проекте.

Обратите внимание на точку после команды git add, точка указывает на то, что мы добавляем полностью все содержимое папки. Есть еще такой пример использования команды git add:

$ git add ruby_code.rb

Это означает, что в репозиторий добавляется один единственный файл ruby_code.rb.

4.4. Команда git commit
Команда git commit необходима для того, чтобы делать «снимки» состояния репозитория. В данном случае название команды commit можно перевести как «фиксация», потому, что мы «фиксируем» изменения, но мне больше нравится перевод «снимок» или калька «коммит», поэтому я буду использовать именно этих два термина.

$ git commit -m ‘initial commit’
[master (root-commit) 02318ee] initial commit
39 files changed, 10212 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
create mode 100644 Gemfile
create mode 100644 README
create mode 100644 Rakefile

Параметр -m позволяет нам добавить сообщение-описание того, что мы запечатлили на снимке совершенном при помощи git commit.

4.5. Проверка состояния Git репозитория

$ git status
# On branch master
nothing to commit (working directory clean)

Команда git status,  показывает текущее состояние репозитория. От того, как часто вы будете ее использовать зависит количество ошибок которые вы будете делать при работе с git репозиторием. Частое использование этой команды — очень хорошая практика! В данный момент git status сообщает нам о том, что никаких изменений не произведено с момента последнего коммита (commit) или как я писал выше «снимка». Давайте внесем некоторые изменения в проект, чтобы посмотреть, что нам после этого вернет команда git status. Итак, добавляем модель User в наше приложение на Ruby on Rails:

$ rails g model User name:string email:string
invoke active_record
create db/migrate/20110123204828_create_users.rb
create app/models/user.rb
invoke test_unit
create test/unit/user_test.rb
create test/fixtures/users.yml

Теперь давайте проверим состояние репозитория:

$ git status
# On branch master
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#       Gemfile.lock
#       app/models/
#       db/migrate/
#       test/fixtures/
#       test/unit/
nothing added to commit but untracked files present (use "git add" to track)

Ага, Git заметил новые файлы, но не начал вести мониторинг за их состоянием. Что нам необходимо сделать? Правильно! Нам необходимо возпользоваться командой git add:

$ git add .
vladimir@egoholic:~/git_example$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       new file:   Gemfile.lock
#       new file:   app/models/user.rb
#       new file:   db/migrate/20110123204828_create_users.rb
#       new file:   test/fixtures/users.yml
#       new file:   test/unit/user_test.rb

… и git commit, чтобы сделать новый «снимок»:
$ git commit -m ‘user model’
[master 2d566e7] user model
5 files changed, 106 insertions(+), 0 deletions(-)
create mode 100644 Gemfile.lock
create mode 100644 app/models/user.rb
create mode 100644 db/migrate/20110123225700_create_users.rb
create mode 100644 test/fixtures/users.yml
create mode 100644 test/unit/user_test.rb

Теперь давайте внесем изменение в файл, который уже мониторится git’ом. Для примера откроем файл модели User и добавим туда что-то совсем простое:


class User < ActiveRecord::Base
#например, добавим комментарий
end

Теперь вновь выполняем команду git status:

$ git status
# On branch master
# Changed but not updated:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#       modified:   app/models/user.rb
#
no changes added to commit (use "git add" and/or "git commit -a")

Из строки: modified: app/models/user.rb, мы видим что был модифицирован файл с нашей моделью, однако какие именно изменения были внесены?

4.6. Изучение изменений используя git diff
Команда git diff позволяет узнать какие изменения были произведены в проекте относительно последнего «снятого» коммита. Пример использования:

$ git diff
diff --git a/app/models/user.rb b/app/models/user.rb
index 4a57cf0..a04566b 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1,2 +1,3 @@
class User < ActiveRecord::Base
+  # например, добавим комментарий
end

Из ответа видно, что в модель User был добавлен комментарий. git diff — это очень полезная команда, особенно при коллективной разработке.

5. Небольшие правки

Выше я писал о том, что команда git init объявляет определенную директорию репозиторием. На самом деле никакого ритуального посващения не происходит, в указанной директории просто создается папка .git в которую Git сохраняет коммиты, бранчи и т.д. Что такое бранчи — узнаете в следующей статье, а сейчас: Пока! Удачи вам в освоении новых горизонтов программирования на Ruby / Ruby on Rails и контроле версий с Git!

Лучшая благодарность автору — ваши комментарии!

Tags:

Responses

  1. Kurcz says:

    января 31, 2011 at 09:43 (#)

    Спасиб, помогли очень.
    Вот только я бы указал еще в статье, как выходить из редактора комментариев, он консоль никсовую открывает при использовании команды git commit

  2. Kurcz says:

    января 31, 2011 at 09:45 (#)

    в смысле, когда из под вендов его юзаешь

  3. VolCh says:

    января 31, 2011 at 13:19 (#)

    Вроде не так страшен git как его малюют, или это пока цветочки? :)

  4. admin says:

    января 31, 2011 at 13:47 (#)

    VolCh, Git это всего лишь программа имеющая всего-то 21 команду. За пару недель можно все на более-менее достаточном уровне освоить. Сложность состоит не в самой программе, а именно в организации контроля версий. Особенно сложно организовать работу, когда разработчиков несколько, но умные люди имеющие большой опыт придумали несколько «паттернов» того, как организовать коллективную разработку. Все это я знаю весьма поверхностно (дело в том,что я сам только начал работать с Git), но я планирую обо всем этом раскопать информацию, разобраться и скомпилировать в статьи. Первые статьи пока будут большей частью ознакомительные, но уже в них я не просто перечисляю команды,а показываю пример работы над, можно сказать, реальным проектом.

  5. says:

    января 31, 2011 at 16:07 (#)

    Не так давно стал использовать hg, а тут ещё и неплохой туториал по git! Огромное спасибо (-:

  6. admin says:

    января 31, 2011 at 16:53 (#)

    Мне тоже друг рекомендовал Mercurial, но Git мне показался лучшим выбором, кроме того у Git есть очень мощное сообщество — GitHub. Кстати, GitHub тоже построен на Ruby on Rails =)

  7. admin says:

    января 31, 2011 at 17:02 (#)

    Kurcz, редактор открывается Git’ом для ввода комментария к коммиту. Комментарий необходим для того, чтобы кратко описать изменения, которые «запечатлены» в коммите. Для того, чтобы не открывался редактор следует использовать git commit, как то показано в статье с параметром -m и следующим далее комментарием, пример:

    git commit -m «add User model»

    теперь мы знаем что вв данном коммите была добавлена модель User.

  8. Tangerine Cat says:

    января 31, 2011 at 19:31 (#)

    — я тут учил. Очень способствует.

  9. admin says:

    января 31, 2011 at 22:05 (#)

    «Погружение в Git» хороший учебник, но не для тех, кто не знаком с английским, кроме того, там сильно все растянуто, если не ошибаюсь 52 раздела. Ну а вообще да, хотя бы листинги посмотреть будет полезно.

  10. says:

    января 31, 2011 at 22:51 (#)

    Порты сосут на маке, да еще и системную папку. Homebrew спасет отца русской демократии

  11. says:

    февраля 1, 2011 at 16:26 (#)

    Ничего себе! GitHub на рельсах?? Здорово. А нету ли случайно подборки, какие очень известные сайты сделаны на рельсах ну или руби? А то только твиттер да вот теперь гитхаб знаю

  12. admin says:

    февраля 1, 2011 at 16:40 (#)

    none, на официальном сайте Ruby on Rails имеется небольшой список проектов: , еще знаю, что Ruby on Rails использовался при разработке достаточно популярной русскоязычной социальной сети LookAtMe и очень популярного приложения Вконтакте — Лицемер (сейчас его какие-то мудаки переписывают на РНР и ругают команду Злых Марсиян. Дело в том, что проект перешел в другие руки, и новый владелец нанял людей для добавления новшеств, а они знаю только РНР решили полностью с нуля переписать). Где-то читал статистику, что в США и Евроме Ruby on Rails одна из самых используемых платформ для разработки веб стартапов. Кстати, кроме github существует еще gitorious, который так же написан на ruby on Rails и если не ошибаюсь, там есть еще и поддержка Mercurial.

  13. says:

    февраля 3, 2011 at 12:10 (#)

    про установку на Mac OS X — чтобы установить командой port install необходимо, чтобы были установлены MacPorts ()

  14. VolCh says:

    февраля 3, 2011 at 20:02 (#)

    >VolCh, Git это всего лишь программа имеющая всего-то 21 команду.

    Просто неоднократно слышал, что git куда сложнее mercurial (hg). А вроде всё то же самое пока. А так согласен, в DVCS самое сложное организовать репозитории и связь между ними. У меня сейчас в проекте (на PHP), который веду один, 5 репозиториев hg и уже несколько раз ошибался что куда пушить и что откуда поллить.

  15. admin says:

    февраля 3, 2011 at 21:14 (#)

    tony, спасибо за объяснение, я просто не имел удовольствия работать с OS X.

    #####

    VolCh, git действительно сложнее однако не на столько сильно, чтобы это было большим препятствием. Я видел старые статьи по git, когда он представлял реально что-то страшное. Сейчас же пользователю предоставляется 21 основная комманда на каждый день. Существуют еще команды, но они используются очень редко, так, что о них даже не упоминают в некоторых руководствах.

    Я кстати собираюсь попробовать работу с Mercurial, однако это будет не скоро и чисто ради интереса знакомства с чем-то новеньким. Возможно, появится еще один цикл статей=)

  16. VolCh says:

    февраля 3, 2011 at 22:22 (#)

    Почитайте для ознакомления — мне очень помогло начать работать, фактически единственная проблема, это организация репозиториев

  17. ilia says:

    апреля 13, 2011 at 14:47 (#)

    Спасибо огромное за отличную статью

Leave a Response

Для подсветки кода используйте BB - коды: [language]...[/language], где language может быть: ruby, javascript, css, html.