— Сегодня я расскажу тебе о двух самых популярных программах контроля версий – SVN и Git.

SVN работает примерно по той схеме, о которой я рассказывал на прошлой лекции. Git, работает немного сложнее, и на нем я собираюсь остановиться поподробнее.

— А можно мне каких-нибудь ссылок на документацию про SVN и про Git?

— Конечно, держи.

http://svnbook.red-bean.com/nightly/ru/svn-book.html

http://githowto.com/ru (это просто шедевр)

Итак — Git.

Принцип работы гита немного сложнее, чем SVN. Гит предлагает, чтобы кроме репозитория на сервере, у каждого пользователя был еще один репозиторий – локальный.

— А куда тогда комититься?

— Комитится пользователь всегда в свой локальный репозиторий.

— А серверный репозиторий?

— Для синхронизации локального и серверного репозитория есть специальные команды – Pull (вытащить) и Push (поместить/затолкнуть)

В этом есть смысл. Иногда программисту надо сделать очень большую работу на своем участке, которая может содержать несколько сотен коммитов, прежде чем ее можно добавить в общий репозиторий.

В SVN для этого пришлось бы заводить отдельную ветку, а затем мерджить ее с trunk’ом.

Гит просто предлагает всегда комититься в локальный репозиторий, а когда работа сделана, то переслать все изменения скопом в центральный репозиторий на сервер.

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

— А почему нельзя просто две недели делать свою работу, а потом закомититься один раз на сервер?

— Дело в том, что программа контроля версий предлагает очень много удобств.

Представь, что ты комитишься каждый день, и на 10-й день обнаружил, что то, что ты делал два последних дня, не будет работать, так как задумано. И ты бы хотел вернуться к коду 8-го дня и попробовать сделать задачу другим образом.

Тогда ты просто откатываешь (rollback) изменения в локальном репозитории за два последних дня и возвращаешься к нужному тебе состоянию кода.

— Т.е. и так можно делать?

— Ага. Более того, ты благодаря сохранению истории коммитов ты можешь узнать, кто, когда и зачем что-то коммитил, в рамках какой фичи/баги велась работа и какие десять файлов были изменены одновременно в рамках этой работы.

Допустим кто-то «фиксил багу» и поломал чужой функционал. Ты можешь просто откатить(rollback) его код и работать дальше, как будто его и не было.

— Ладно, это круто, убедил. А можно пару примеров, как все это работает?

— Конечно.

Клонирование (clone) центрального репозитория к себе на локальный компьютер:

Коммиты и ветки - 1

— Т.е. операция Checkout больше не нужна.

— Ага. А вот примеры операций Push:

Коммиты и ветки - 2

И Pull:

Коммиты и ветки - 3

— Ага. Более-менее ясно.

— Кстати, есть крутой сервис, называется GitHub.

Любой программист может там зарегистрироваться и создавать свои Git-репозитории. Советую тебе познакомиться с ним поближе.

Вот тебе пара полезных ссылок:

http://habrahabr.ru/post/125799/

http://githowto.com/ru

http://webhamster.ru/site/page/index/articles/comp/171

На заметку, под гит существует довольно много «клиентов».

Во-первых – это GitBash – где можно вводить команды текстом

Во-вторых – это TortoiseGit – хорошая программа, которая встраивается в проводник Windows и позволяет работать с файлами в Git-репозитории прямо из проводника.

Intellij IDEA имеет поддержку Git, и все сложные команды можно делать прямо из нее в пару кликов.

— И что мне учить?

— Рекомендую разобраться со всем этим.

Вот, пройдешь ты собеседование, придешь на работу. Тебе скинут ссылку на гит, твои логин и пароль и все. Дальше ты сам.

— Что сам?

— Сам ставишь гит, вытаскиваешь себе копию репозитория,…

Затем ты должен собрать и попробовать запустить проект.

А инструкция по сборке скорее всего тоже в Git’е (в Git-репозитории), как и документация по проекту.

К тебе подойдет твой тимлид вечером и скажет: — Ну что, с чем уже разобрался?

А ты такой: – А я тут гит пробую установить, но у меня еще ничего не получилось. Вы ведь меня не уволите, правда?

Или ты можешь еще днем подойти к тимлиду и сказать: — Установил гит, вытащил проект, порылся в документации, но там сотни файлов и пока что не все понятно. Где актуальная инструкция по сборке?

Чувствуешь разницу?

— Ага. Во втором случае я такой крутой программист и все дела, а в первом какой-то роболох, который не умеет даже проект из гита вытащить. Т.е. облажался еще до того, как дело дошло до программирования. Меня, небось, после этого и программировать-то не допустят.

— Вот ты сам и ответил на свои вопросы. Так что учи, разбирайся. Никто за тебя это не сделает.

— А ты мне не поможешь?

— Уже помог. Мы тут Java учим, если ты не забыл. А все остальное – сам. Или тебе голова дана только для того, чтобы ею пить?

— Ладно, я все понял. Спасибо, Билаабо!