Створення репозиторію

Останнє оновлення 2025-01-28 | Редагувати цю сторінку

Приблизний час: 10 хвилин

Огляд

Питання

  • Де Git зберігає інформацію?

Цілі

  • Створити локальний репозиторій Git.
  • Пояснити призначення каталогу .git.

Після налаштування Git ми можемо почати його використання.

Ми продовжимо нашу вигадану історію, у якій Альфредо досліджує, чи можливо відправити планетарний посадковий модуль на Марс.

Перш за все, створімо у каталозі Desktop новий підкаталог для нашої роботи, а потім змінимо поточний робочий каталог на новостворений:

BASH

$ cd ~/Desktop
$ mkdir recipes
$ cd recipes

Далі ми кажемо Git зробити recipes репозиторієм -- місцем, де Git може зберігати версії наших файлів:

BASH

$ git init

Майте на увазі, що git init створює репозиторій, до якого можна додавати підкаталоги та їх файли. Немає потреби створювати окремі репозиторії вкладені в репозиторій recipes, незалежно від того чи були підкаталоги присутні від початку або були додані пізніше. Крім того, зверніть увагу, що створення каталогу recipes та його ініціалізація як репозиторію є повністю окремими процесами.

Якщо ми використаємо ls, щоб передивитись зміст каталогу, то здається, що нічого не змінилося:

BASH

$ ls

Але якщо ми додамо опцію -a, щоб показати всі файли, то побачимо, що Git створив у каталозі recipes прихований каталог під назвою .git:

BASH

$ ls -a

ВИХІД

.	..	.git

Git використовує цей спеціальний підкаталог для зберігання всієї інформації про проєкт, у тому числі відстежувані файли і підкаталоги, що розташовані в каталозі проєкту. Якщо ми коли-небудь видалимо підкаталог .git, то ми втратимо усю історію проєкту.

Тепер ми можемо почати використовувати одну з найважливіших команд git, яка особливо корисна для початківців. git status друкує інформацію про поточний стан нашого проєкту, та перелік зроблених змін у проєкті з варіантами щодо подальших дій. Ми можемо використовувати цю команду необмежену кількість разів, як тільки ми хочемо зрозуміти, що відбувається.

BASH

$ git status

ВИХІД

On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)

Якщо ви користуєтеся іншою версією git, вигляд результату цієї команди може дещо відрізнятися.

Де створювати репозиторії Git

Відстежуючи інформацію про рецепти (проєкт, який ми вже створили), Альфредо також хотів би особливо відстежувати інформацію, пов’язану саме з десертами. Альфредо створює проєкт desserts всередині свого проєкту recipes за допомогою наступної послідовності команд:

BASH

$ cd ~/Desktop   # повернутися до каталогу Desktop
$ cd recipes     # перейти до каталогу recipes, який вже є репозиторієм Git
$ ls -a          # перевірити, що підкаталог .git все ще присутній у каталозі recipes
$ mkdir desserts # створити підкаталог recipes/desserts
$ cd desserts    # перейти у підкаталог desserts
$ git init       # створити репозиторій Git у підкаталозі desserts
$ ls -a          # перевірити наявність підкаталогу .git, що підтверджує створення нового репозиторію

Чи потрібно запускати команду git init у підкаталозі desserts для відстеження файлів, розташованих у підкаталозі desserts?

Ні. Альфредо не потрібно робити окремий підкаталог desserts репозиторієм Git, оскільки репозиторій recipes відстежуватиме будь-які файли, підкаталоги, та файли у підкаталогах в ньому. Таким чином, щоб відстежувати всю інформацію про десерти, Альфредо повинен був лише додати підкаталог desserts до каталогу recipes.

Крім того, репозиторії Git можуть заважати один одному, якщо вони “вкладені”: зовнішній репозиторій намагатиметься відстежувати зміни у внутрішньому репозиторії. Тому найкраще кожного разу створювати новий репозиторій Git в окремому каталозі. Щоб переконатися, що каталог не є репозиторієм, перевірте результат команди git status. Якщо він виглядає як показано нижче, ви можете створити новий репозиторій, як було показано вище:

BASH

$ git status

ВИХІД

fatal: Not a git repository (or any of the parent directories): .git

Виправлення помилок git init

Джиммі пояснив Альфредо, що вкладений репозиторій є зайвим і може призвести до плутанини у майбутньому. Альфредо бажав би повернутися до попередньої організації проєкту де необхідний тільки один репозиторій Git. Як Альфредо може скасувати свою останню команду git init виконану у підкаталозі desserts?

Контекст

Видаляти файли з репозиторію Git треба обережно. Проте, ми ще не навчилися вказувати Git як відстежувати певний файл; про це ми дізнаємося в наступному епізоді. Файли, які не відстежуються Git, можна легко видалити, як і будь-які інші “звичайні” файли:

BASH

$ rm filename

Подібним чином можна видалити каталог за допомогою команди rm -r dirname. Якщо файли чи каталоги, які видаляються таким чином, вже відстежуються Git, тоді їх видалення стає ще однією зміною, яку нам потрібно буде відстежувати (ми побачимо як це робити в наступному епізоді).

Відповідь

Git зберігає всі свої файли в каталозі .git. Щоб виправити цю маленьку помилку, Альфредо може просто видалити каталог .git у підкаталозі desserts, виконавши наступну команду всередині каталогу recipes:

BASH

$ rm -rf desserts/.git

Проте, будьте обережні! Виконання цієї команди у неправильному каталозі призведе до видалення всієї історії змін проєкту, яку ви хотіли б зберегти. Загалом, видалення файлів і каталогів за допомогою rm з командного рядка не можна скасувати. Тому завжди перевіряйте свій поточний каталог за допомогою команди pwd.

Ключові моменти

  • git init ініціалізує репозиторій.
  • Git зберігає всі дані репозиторію в каталозі .git.