Що таке СКВ?
Система контролю версій (СКВ, VCS) — програмне забезпечення, яке відстежує та записує зміни у файлах і директоріях з плином часу. Дозволяє повертатися до будь-якої збереженої версії.
Типи СКВ
Локальні — зміни лише на локальній машині (RCS).
Централізовані — єдиний сервер (SVN, CVS).
Розподілені — копія у кожного (Git, Mercurial).
Навіщо потрібні?
Відстеження всіх змін у проєкті, можливість повернутися до попередньої версії, паралельна робота кількох розробників без конфліктів та зберігання повної історії змін.
Коротка історія
1972 — SCCS (перша СКВ), 1982 — RCS, 1990 — CVS, 2000 — SVN, 2005 — Git (Лінус Торвальдс). Сьогодні Git — де-факто стандарт у індустрії.
Git — безкоштовна розподілена система контролю версій з відкритим вихідним кодом, створена у 2005 році Лінусом Торвальдсом для розробки ядра Linux. Назва «Git» у британському сленгу означає «неприємна людина» — Торвальдс жартома назвав проєкт на свою честь.
Розподіленість
Кожен розробник має повну копію репозиторію, включно з усією історією змін. Це забезпечує роботу без підключення до мережі та підвищує надійність.
Швидкість
Git виконує більшість операцій локально, що робить його надзвичайно швидким порівняно з централізованими системами, які потребують звернення до сервера.
Цілісність даних
Кожен файл та коміт має унікальний SHA-1 хеш. Це гарантує, що жодні дані не можуть бути непомітно змінені або пошкоджені.
«Git є дурнем. Насправді це просто набір інструментів для роботи з файловою системою, яка слідкує за вмістом. Але разом вони утворюють дуже потужну систему.»
— Лінус Торвальдс, творець Git та LinuxГілки та злиття
Гілки (branches) у Git — надзвичайно легкі та швидкі. Нову гілку можна створити за мілісекунди і переключитися між ними миттєво.
Розподілений характер
Повна копія репозиторію на кожній машині. Будь-який розробник може бути сервером. Не існує єдиної точки відмови.
Безпека та цілісність
Криптографічна хеш-функція SHA-1 гарантує цілісність усієї історії. Неможливо непомітно підмінити або пошкодити дані.
Продуктивність
Git написаний на C і оптимізований для швидкості. Commit, diff, log — виконуються миттєво навіть у великих репозиторіях.
Командна робота
Pull requests, code review, merge — стандартний процес командної розробки. GitHub, GitLab та Bitbucket побудовані навколо Git.
Відкат змін
Повна історія кожного файлу. Можна повернутися до будь-якого стану проєкту, порівняти версії або відновити видалені файли.
Безкоштовний і відкритий
Git — вільне ПЗ з відкритим кодом (GPL v2). Немає ліцензійних обмежень. Підтримується великою спільнотою по всьому світу.
Гнучкість
Git підтримує різні робочі процеси: GitFlow, GitHub Flow, Trunk-Based Development. Можна налаштувати під будь-який проєкт.
git init
Ініціалізація репозиторію
Створює новий локальний Git-репозиторій у поточній директорії. Ініціалізує приховану папку .git, де зберігається вся інформація про версії файлів.
# Ініціалізуємо новий репозиторій у новій папці git init my-project # або в поточній директорії git init # Результат: Initialized empty Git repository in .git/
git clone
Клонування репозиторію
Створює локальну копію існуючого репозиторію з GitHub, GitLab або іншого місця. Автоматично встановлює зв'язок з віддаленим репозиторієм як «origin».
# Клонування по HTTPS git clone https://github.com/user/repo.git # Клонування по SSH git clone git@github.com:user/repo.git # Клонування у конкретну папку git clone https://github.com/user/repo.git my-folder
git status
Стан робочого дерева
Показує поточний стан робочої директорії: які файли змінено, які підготовлено до коміту (staged), а які не відстежуються (untracked). Найчастіше використовувана команда.
git status # Скорочений вивід git status -s # M modified_file.txt # ?? untracked_file.js
git add
Додавання файлів до індексу
Додає зміни у файлах до «staging area» (індексу) — підготовчої зони перед створенням коміту. Можна додавати окремі файли або всі зміни одразу.
# Додати конкретний файл git add index.html # Додати всі змінені файли git add . # Додати файли за маскою git add *.js # Інтерактивне додавання частинами git add -p
git commit
Збереження змін (коміт)
Зберігає підготовлені зміни у репозиторій як новий «знімок» (snapshot). Кожен коміт має унікальний SHA-1 хеш і повідомлення, яке описує зроблені зміни.
# Коміт із повідомленням git commit -m "feat: додано сторінку входу" # Додати всі змінені файли і закомітити git commit -am "fix: виправлено помилку валідації" # Виправити останній коміт git commit --amend
git branch
Управління гілками
Дозволяє переглядати, створювати і видаляти гілки. Гілки — це незалежні лінії розробки. Основна гілка традиційно називається «main» або «master».
# Переглянути всі гілки git branch # Створити нову гілку git branch feature/login # Перейти на гілку git checkout feature/login # Створити і одразу перейти git checkout -b feature/login # Видалити гілку git branch -d feature/login
git merge
Злиття гілок
Об'єднує зміни з однієї гілки в іншу. Git автоматично вирішує більшість конфліктів, але якщо ті самі рядки змінено по-різному — потрібне ручне вирішення конфлікту.
# Перейти на основну гілку git checkout main # Злити гілку feature/login в main git merge feature/login # Злиття без fast-forward (завжди merge commit) git merge --no-ff feature/login
git pull
Отримання та злиття змін
Завантажує зміни з віддаленого репозиторію та одразу зливає їх з поточною гілкою. Еквівалент git fetch + git merge.
# Завантажити зміни з origin git pull # Завантажити з конкретного remote і гілки git pull origin main # Використати rebase замість merge git pull --rebase origin main
git push
Відправлення змін на сервер
Відправляє локальні коміти до віддаленого репозиторію (GitHub, GitLab та ін.). Для першого push нової гілки потрібно вказати upstream за допомогою прапорця -u.
# Відправити на origin поточну гілку git push # Вказати remote і гілку явно git push origin main # Перший push нової гілки git push -u origin feature/login # Видалити гілку на remote git push origin --delete old-branch
git log
Перегляд історії комітів
Показує хронологічну історію комітів у репозиторії: хеш коміту, автор, дата, повідомлення. Має безліч параметрів для фільтрації та форматування виведення.
# Стандартна повна історія git log # Компактний однорядковий вигляд git log --oneline # Граф гілок у терміналі git log --oneline --graph --all # Останні 5 комітів git log -n 5 # Коміти конкретного автора git log --author="Іван Іваненко"
Як отримати сертифікат: Пройдіть всі розділи курсу, виконайте практичні завдання з роботи в Git та успішно складіть підсумковий тест. Після цього ви отримаєте персональний сертифікат із вашим ім'ям та датою видачі.