Чим Git відрізняється від інших систем контролю версій

Модуль 1Урок 3 з 53Безкоштовний модуль

Якщо ви вже торкалися SVN, Git спочатку здається дивним. Він distributed: clone — не «підключення до сервера», а повна копія історії. Можна тижнями commit-ити офлайн; sync з remote — окремий крок. Усі репозиторії рівні за природою: ноутбук, CI і GitHub обмінюються змінами; «головний» remote — лише домовленість команди.

Порада

Золоте правило: на рівні протоколу немає «головного» репозиторію. Є лише домовленість, який remote вважати upstream. Ваш ноутбук, сервер CI і GitHub — три однакові за природою бази, що обмінюються змінами через push і fetch.

Дешеві гілки й знімок усього проєкту

Branch у Git — вказівник на commit, операція O(1): як закладка в браузері, а не копія дерева файлів. Історію локально можна переписувати (rebase, amend), доки не поділилися нею з іншими. Commit — знімок усього відстежуваного проєкту, не окремого файлу: один commit = одна логічна зміна для всього репозиторію.

Перейменування файлу не рве історію так жорстко, як у старих file-oriented системах: Git бачить вміст і структуру разом. Це змінює workflow — ви думаєте знімками проєкту, а не «ревізіями одного файлу». Створити гілку для експерименту так само легко, як створити закладку; видалити її теж дешево.

Хеші замість номерів версій

Git не видає «версію 1.7.3» автоматично для кожного commit. Замість цього кожен знімок отримує SHA-1 хеш — довгий ідентифікатор, на кшталт a1b2c3d. Він залежить від вмісту, батьківських commit і метаданих. Два однакові знімки дадуть той самий хеш; зміна одного байта — інший хеш. Для людей є короткі форми та tag; для машини — унікальний відбиток.

Приклад

Уявіть commit як запечатаний конверт із описом змін. Номер версії SVN — порядковий номер у журналі бібліотеки. Хеш Git — відбиток воску на конверті: якщо всередині щось змінити, печатка інша. Тому посилатися на commit за хешем безпечніше, ніж «версія 42», яку хтось міг перезаписати в іншій системі.

Bash
git log --oneline -5
git branch experiment
git branch
git diff HEAD~1 HEAD

Що запамʼятати

Git — distributed, з повною історією локально; branch дешеві; commit — знімок усього проєкту; ідентифікатор — хеш, не порядковий номер. Історію можна обережно змінювати локально, доки не поділилися нею з іншими. Тому кілька remote і pull request — нормальна модель, а не «хак поверх SVN».

Перевірка

4 питання

Кілька питань за матеріалом уроку. Спроб — скільки завгодно.

1.Чому branching у Git називають «дешевим»?
2.Як Git ідентифікує commit?
3.Commit у Git охоплює…
4.Що означає «distributed» для вашого ноутбука?