Основи системи управління версіями git для новачків

Знадобилося мені нещодавно навчити азам Git кількох моїх співробітників, які тільки вивчають програмування і пробують працювати. Пошукавши в інтернеті статті для новачків, я зіткнувся з тим, що більшість з них про те як використовувати консольний Git або ж про його необхідність і перевага перед іншими подібними системами. Новачок зазвичай не дуже сильний у всіх цих справах. Я вважаю, що йому, для початку, і знати це все не обов'язково. Адже можна використовувати Git для своїх проектів і вчитися всім його принад паралельно з вивченням програмування. Але, настійно рекомендую сприймати цю статтю як ознайомчу і в майбутньому вивчити Git докладніше.

Маленький план того, що ми будемо робити:

  1. Створення сховища на Bitbucket.
  2. Клонування сховища (додавання його в SmartGit).
  3. Створення комита.
  4. Скасування змін.
  5. Створення гілок.
  6. Проштовхування гілок на віддалений репозиторій (аплоад гілок на віддалений сервер).
  7. Злиття гілок.

Склоніруем репозиторій використовуючи SmartGit. Візьмемо посилання на наш репозиторій:

Тепер запустимо SmartGit, виберемо «Project» - «Clone» (або Ctrl + Alt + O) і заповнимо необхідні поля:

Система запросить ваш логін і пароль від Bitbucket:

У наступному вікні доступні дві опції клонування «Include Submodules» і «Fetch all Heads and Tags». Git дозволяє окремі модулі програми зберігати в різних репозиторіях. Якщо ви відзначите опцію «Include Submodules» - SmartGit автоматично довантажити всі модулі. Якщо відзначити опцію «Fetch all Heads and Tags», то SmartGit після створення папки проекту завантажить всі гілки і теги для даного сховища:

Далі дуже просто - необхідно вибрати директорію, куди клонувати репозиторій:

Наступне вікно - ім'я проекту в SmartGit:

Якщо ви клонували порожній репозиторій (як в цій статті), то побачите наступне вікно:

Йдемо далі. Створимо комит. Що таке комит? Це фіксація змін. Кожен комит «запам'ятовує» що саме ви змінили і в будь-який момент часу можна повернути колишній стан файлів. Раджу вам після кожного значимого зміни, наприклад, виправлення бага в функції, робити комит. Що б створити комит, потрібно щось змінити в проекті. Додайте парочку файлів в папку з проектом:

Тепер можна побачити зміни нашого проекту в SmartGit:

Виберемо обидва файли і натиснемо спочатку «Stage», а потім «Commit». Навіщо потрібно натискати «Stage»? Кнопка «Stage» додає в поточний індекс вибрані файли. Якщо ви хочете створити комит для двох файлів, а змінили, припустимо цілих 5, досить вибрати ці два файли, натиснути «Stage», що додасть їх в індекс, а після «Commit». Таким чином тільки обрані два файли потраплять в комит.

Після чого слід натиснути кнопку «Commit». Кнопка «Commit Push »робить те ж саме, але ще і проштовхує (заливає) зміни в віддалений репозиторій (в нашій випадку це Bitbucket). Поки не варто цього робити. Проштовхуванням ми займемося далі. Внизу, в списку гілок, з'явиться локальна гілка «master». Це основна гілка коду програми. Що таке гілки, розповім трохи пізніше. А зараз зробимо що-небудь з нашим проектом, а потім відкинути редагування. Я видалю файл readme.txt, відредагую файл index.php і додам новий файл confic.cfg:

А тепер відкинути редагування після коміта. Зайдемо в Log:

Виберемо комит, до якого хочемо відкотитися і натиснемо «Reset»:

У наступному вікні нам пропонують вибрати який саме «Reset» ми хочемо зробити:

Поясню. Згадайте, що при створенні коміта, ви спочатку додаєте файли в індекс (stage). Це дозволяє закомітіть тільки проіндексовані файли. Soft reset скидає тільки Коміто. Індекс і фізичні зміни в файлах залишаються. Mixed reset працює так само, як і софт, але ще видаляє індекс файлів. Hard reset видаляє Коміто, індекс і фізичні зміни в файлах. Акуратно використовуйте hard reset, що б випадково не видалити зайвого.

Я зробив hard reset для наочності:

Як бачите все зміни в файлах пропали, а точніше все повернулося до стану першого коміта.

Тепер трохи про створення гілок. Навіщо вони взагалі потрібні? Гілка дозволяє зберегти поточний стан коду, і експериментувати. Наприклад, ви пишіть новий модуль. Логічно робити це в окремій гілці. Дзвонить начальство і каже, що в проекті баг і терміново потрібно пофиксить, а у вас модуль не дописані. Як же заливати неробочі файли? Просто перейдіть на робочу гілку без модуля, Виправлено баг і заливайте файли на сервер. А коли «небезпека» минула - продовжите роботу над модулем. І це один з багатьох прикладів користі гілок.

Спробуємо створити свою гілку. У нас вже одна є, це master. Вона створюється автоматично (якщо відсутня) коли ви робите перший комит. Створимо ще одну гілку і назвемо її «new_future1». Натисніть F7 або правим кліком внизу у вкладці «Branches» на напис «Local Branches» і в випадаючому списку виберіть «Add branch»:

Натисніть «Add branch Switch »що б відразу переключитися на створену гілку. Тепер ви можете створювати нові Коміто, змінювати файли і не турбуватися. Так як у вас завжди є гілка майстер, в яку можна повернутися. Коли ви переключаєте гілку, Git змінює локальні файли на ті, які є в цій гілці. Тобто, якщо ви створите нову гілку поміняєте щось у файлі index.php, а потім перейдіть на гілку master то всі зміни, вироблені вами будуть видалені. Якщо ж переключитися назад в створену гілку - зміни повернуться.

До сих пір ми працювали локально. Спробуємо залити праці нашої роботи на сервер. Створимо який-небудь комит в гілці new_future1. У разі якщо репозитарій порожній, а він порожній, так як ми створили його деякий час назад і на сервер нічого не залили, Bitbucket основний призначає ту гілку, яку залили першої. Тому перемкнемося на гілку «master» і натиснемо кнопку «Push»:

Далі SmartGit запитає налаштувати чи відстеження гілки (cofigure tracking). Відстеження дозволяє автоматично оновлювати відповідні гілки, коли ви завантажуєте або завантажуєте оновлення коду. Тому сміливо тисніть «Configure»:

Тепер перейдіть на іншу гілку і виконайте те ж саме. Зайдемо на Bitbucket і подивимося, що змінилося в розділі «Commits»:

Як бачите все потрапило на віддалений сервер.

Тепер сольем гілки. Навіщо це потрібно? Візьмемо той же приклад з модулем. Рано чи пізно ви допишіть його і вам потрібно буде додати код модуля в основний код програми. Досить просто злити гілки. Для цього перейдіть на гілку, в яку хочете злити код. У нашому випадку це майстер. Після чого натисніть правим кліком на гілку, з якої хочете злити код і виберіть «Merge»:

Далі SmartGit запитає яким саме чином потрібно злити гілки. Виберіть «Create Merge-Commit».

А тепер залишилося проштовхнути зміни гілки master на сервер. Заливаємо зміна на сервер так само, як ми робили це раніше і отримуємо:

Схожі пости: