Знадобилося мені нещодавно навчити азам Git кількох моїх співробітників, які тільки вивчають програмування і пробують працювати. Пошукавши в інтернеті статті для новачків, я зіткнувся з тим, що більшість з них про те як використовувати консольний Git або ж про його необхідність і перевага перед іншими подібними системами. Новачок зазвичай не дуже сильний у всіх цих справах. Я вважаю, що йому, для початку, і знати це все не обов'язково. Адже можна використовувати Git для своїх проектів і вчитися всім його принад паралельно з вивченням програмування. Але, настійно рекомендую сприймати цю статтю як ознайомчу і в майбутньому вивчити Git докладніше.
Маленький план того, що ми будемо робити:
- Створення сховища на Bitbucket.
- Клонування сховища (додавання його в SmartGit).
- Створення комита.
- Скасування змін.
- Створення гілок.
- Проштовхування гілок на віддалений репозиторій (аплоад гілок на віддалений сервер).
- Злиття гілок.
Склоніруем репозиторій використовуючи 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 на сервер. Заливаємо зміна на сервер так само, як ми робили це раніше і отримуємо: