— Сьогодні я розповім тобі про дві найпопулярніші програми контролю версій – 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-репозиторії прямо з провідника.

span>

Intellij IDEA має підтримку Git, і всі складні команди можна робити прямо з неї в пару кліків.

— І що мені вчити?

— Рекомендую розібратися з цим.

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

— Що сам?

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

Тому ти маєш зібрати та спробувати запустити проект.

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

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

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

Або ти можеш ще вдень підійти до тимліда і сказати: Встановив гіт, витягнув проект, порився в документації, але там сотні файлів і поки що не все зрозуміло. Де актуальна інструкція зі збирання?

Відчуваєш різницю?

— Ага. У другому випадку я такий крутий програміст і всі справи, а в першому якийсь боягуз, який не вміє навіть проект із гіта витягнути. Тобто. облажався ще до того, як дійшло до програмування. Мене, мабуть, після цього і програмувати не допустять.

— Ось ти сам і відповів на запитання. Так що вчи, розумійся. Ніхто це за тебе не зробить.

— А ти мені не допоможеш?

— Вже допоміг. Ми тут Java вчимо, якщо ти не забув. А все інше – сам. Чи тобі голова дана лише для того, щоб нею пити?

— Гаразд, я все зрозумів. Дякую, Білаабо!