Модуль 8 · Урок 29 із 58
Git model: snapshots, working tree, index і HEAD
Git стає передбачуваним, коли ви перестаєте сприймати його як кнопку «зберегти все». Repository зберігає snapshots, working tree містить поточні файли, index готує наступний snapshot, а HEAD називає commit, від якого ви працюєте.
Безпечна Git-практика модуля 8
Пакет містить тільки synthetic repository files, локальний Python CLI, tests і read-only history verifier. Не додавайте .git, .env, credentials, персональні або production-дані, machine paths чи зовнішні endpoints.
Repository — локальна база об’єктів і references
Git зберігає стан проєкту як послідовність snapshots. Commit посилається на tree, parent commit і metadata. Незмінений file content не треба логічно зберігати заново: snapshot може посилатися на вже наявний object. GitHub або інший host не є самим Git — більшість status, diff, commit і history operations працюють локально.
git init створює repository у поточній теці; git clone отримує repository разом із history та налаштовує remote. Жодна з команд не робить ваші майбутні commits автоматично публічними.Три області пояснюють більшість команд
| Область | Що містить | Питання |
|---|---|---|
| Working tree | Файли, які зараз бачить editor | Що я змінив відносно index/HEAD? |
| Index / staging area | Точна версія paths для наступного commit | Що ввійде в snapshot? |
| Repository / HEAD | Committed objects і current reference | Від якого commit я працюю? |
Один file може мати staged version і додаткові unstaged edits одночасно. Тому «file staged» не означає, що всі його поточні bytes підуть у commit.
status — інвентар, а не діагноз
git status --short
git statusstatus порівнює HEAD, index і working tree та показує tracked/untracked/conflicted states. Short format зручний для automation, але дві колонки треба читати окремо: index status і working-tree status. Перед зміною state спершу зафіксуйте цей inventory.
diff відповідає на різні питання
git diff # working tree проти index
git diff --staged # index проти HEAD
git diff HEAD -- src/ # усе поточне проти HEAD для pathЗвичайний git diff не показує вже staged changes. Review перед commit має включати щонайменше status і diff --staged. Pathspec звужує inspection, але не повинен приховувати випадково staged unrelated file.
Tracked states не дорівнюють file existence
- Untracked: file існує у working tree, але Git ще не відстежує його.
- Modified: tracked content відрізняється від selected comparison area.
- Staged: version записана в index для наступного commit.
- Committed: snapshot доступний через commit object.
.gitignore впливає на intentionally untracked files. Він не припиняє tracking file, який уже є в history/index.
Безпечний observation loop
git status --short— перелік paths і states.git diff— unstaged content.git diff --staged— candidate snapshot.git log --oneline --decorate -n 5— current history/HEAD.- Лише потім state-changing command.
git rev-parse --show-toplevel.git branch --show-current.git diff --staged.git remote -v, якщо потрібен.Definition of Done
- Можете пояснити working tree, index, HEAD без метафори «Git зберіг файл».
- Розрізняєте
diffіdiff --staged. - Перед commit перевіряєте exact candidate snapshot.
- Не плутаєте локальний repository із GitHub.
- Не додаєте untracked secrets «щоб status став чистим».
Методичні джерела
Урок, сценарії, пояснення й вправи створені SEOWORK. Посилання ведуть лише на офіційну документацію Git і GitHub.
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.