Struktura repozytorium Git
Struktura głównego repozytorium Git na serwerze VPS AlexHost
Dlaczego warto korzystać z Git na AlexHost? Git jest kamieniem węgielnym kontroli wersji, a hosting repozytoriów na AlexHost VPS zapewnia pełną kontrolę z dostępem roota, ultraszybką pamięcią masową NVMe i bezpiecznymi środowiskami chronionymi przed atakami DDoS. Niezależnie od tego, czy jesteś samodzielnym programistą, czy zarządzasz zespołem, elastyczny VPS AlexHost zapewnia płynny przepływ pracy Git. Ten przewodnik przedstawia strukturę repozytorium Git i sposób jego wykorzystania na serwerze AlexHost.
1. Katalog roboczy
Katalog roboczy to miejsce, w którym znajdują się rzeczywiste pliki projektu. Kiedy klonujesz repozytorium Git, otrzymujesz kopię wszystkich śledzonych plików, które są umieszczane w katalogu roboczym. Jest to obszar, w którym aktywnie edytujesz pliki, wprowadzasz zmiany i dodajesz nową zawartość
- Zmodyfikowane pliki: Każdy plik edytowany w katalogu roboczym będzie uważany za zmodyfikowany do momentu jego wycofania lub zresetowania zmian.
- Pliki nieśledzone: Pliki, które nie są jeszcze śledzone przez Git, będą wyświetlane w katalogu roboczym jako nieśledzone, dopóki nie zostaną wystawione i zatwierdzone.
2. Obszar przejściowy (indeks)
Obszar przejściowy (zwany także indeksem) jest miejscem pośrednim, w którym zmiany w plikach są gromadzone przed zatwierdzeniem ich do repozytorium. Pliki lub zmiany są dodawane do obszaru przejściowego za pomocą polecenia git add. Zmiany w obszarze przejściowym będą częścią następnego zatwierdzenia
- Dodawanie zmian do obszaru przejściowegogit add <file>
- Wyświetl obszar przejściowy: Możesz zobaczyć, co znajduje się w obszarze przejściowym za pomocą git status.
3. Katalog Git (folder .git)
Katalog Git, przechowywany w folderze .git, jest sercem każdego repozytorium Git. Zawiera on wszystkie istotne informacje o historii, konfiguracji i bieżącym stanie projektu. Katalog ten jest automatycznie tworzony podczas inicjalizacji lub klonowania repozytorium Git
Kluczowe składniki katalogu .git:
- HEAD: Plik wskazujący na bieżące zatwierdzenie w gałęzi.
- Branches: Zawiera informacje o gałęziach w repozytorium.
- Obiekty: Przechowuje wszystkie obiekty, takie jak commity, bloby (dane plików) i drzewa (struktura katalogów).
- Refs: Zawiera odniesienia do commitów, w tym headów (gałęzi), tagów i gałęzi remote-tracking.
- Config: Plik konfiguracyjny lokalnego repozytorium, w którym przechowywane są ustawienia takie jak piloty lub informacje o użytkowniku.
- Logs: Przechowuje dzienniki wszystkich działań, takich jak zatwierdzenia, wyewidencjonowania i ponowne bazy.
- Hooks: Niestandardowe skrypty, które mogą wyzwalać akcje przed lub po określonych zdarzeniach Git (np. commit, push).
4. Historia zatwierdzeń
Każde zatwierdzenie jest migawką repozytorium w określonym momencie. Zatwierdzenie zawiera zmiany w plikach wraz z metadanymi, takimi jak komunikat zatwierdzenia, autor i znacznik czasu. Zatwierdzenia tworzą historię projektu
- Zatwierdzenia są przechowywane w katalogu .git/objects.
- Każde zatwierdzenie wskazuje na poprzednie zatwierdzenie (z wyjątkiem pierwszego), tworząc połączony łańcuch, który można wizualizować jako historię projektu.
5. Gałęzie
Gałąź to wskaźnik do konkretnego zatwierdzenia, umożliwiający jednoczesną pracę nad różnymi wersjami projektu. Domyślnie Git rozpoczyna się od gałęzi o nazwie main (lub master w starszych wersjach)
- Wskaźnik gałęzi: Gałęzie są po prostu wskaźnikami do zatwierdzenia. Utworzenie nowej gałęzi oznacza utworzenie wskaźnika do bieżącego zatwierdzenia, umożliwiając tworzenie nowych zatwierdzeń w tej gałęzi bez wpływu na inne gałęzie.
- HEAD: Wskaźnik HEAD w Git wskazuje bieżącą gałąź lub zatwierdzenie, nad którym pracujesz. Zazwyczaj wskazuje na najnowsze zatwierdzenie w bieżącej gałęzi.
6. Znaczniki
Tagi to odniesienia do konkretnych punktów w historii Git, często używane do oznaczania wersji wydania (np. v1.0, v2.0). W przeciwieństwie do gałęzi, tagi nie są aktualizowane wraz z nowymi zatwierdzeniami
- Lekkie tagi: Są to proste wskaźniki do zatwierdzenia, podobne do gałęzi.
- Tagi z adnotacjami: Zawierają dodatkowe metadane, takie jak nazwa taggera, data i wiadomość tagu.
7. Piloty
Remote w Git to odniesienie do kopii repozytorium, która jest hostowana w innym miejscu, często na platformach takich jak GitHub, GitLab lub Bitbucket. Piloty są używane do współpracy, umożliwiając wypychanie zmian do lub wyciąganie zmian z innych kopii repozytorium
- Pochodzenie: Domyślnie główne zdalne repozytorium nosi nazwę origin.
8. Obiekty w Git
Katalog obiektów Git (.git/objects) zawiera cztery podstawowe typy obiektów, które tworzą historię repozytorium
- Blob: Przechowuje rzeczywistą zawartość pliku.
- Drzewo: Reprezentuje katalog, mapując nazwy plików na obiekty blob i podkatalogi (inne obiekty drzewa).
- Commit: Przechowuje metadane o każdej zmianie (autor, data, wiadomość) i wskazuje na obiekt drzewa.
- Tag: Wskazuje na zatwierdzenie i przechowuje informacje o taggerze i wiadomości (w przypadku tagów z adnotacjami).
9. Haki
Git umożliwia definiowanie niestandardowych skryptów (hooków), które mogą być uruchamiane na różnych etapach przepływu pracy Git. Skrypty te mogą być uruchamiane automatycznie po lub przed zdarzeniami takimi jak zatwierdzanie, wypychanie lub scalanie. Haki mogą wymuszać jakość kodu, uruchamiać testy lub uruchamiać potoki CI/CD. Haki są przechowywane w katalogu .git/hooks/
- Hak przed zatwierdzeniem: Uruchamiany przed utworzeniem zatwierdzenia.
- Hak po zatwierdzeniu: Uruchamiany po utworzeniu zatwierdzenia.
10. Dzienniki
Git przechowuje dzienniki wszystkich działań w repozytorium, takich jak zatwierdzenia, wyewidencjonowania, scalenia i wycofania. Dzienniki te pomagają w debugowaniu i przeglądaniu działań podjętych w repozytorium
- Git Reflog: Przechowuje zapis wszystkich zmian we wskaźniku HEAD, umożliwiając odzyskanie po działaniach takich jak reset gałęzi.
Podsumowanie struktury repozytorium Git
- Katalog roboczy: Zawiera pliki i katalogi w ich bieżącym stanie.
- Staging Area (Index): Miejsce, w którym zmiany są przechowywane przed zatwierdzeniem.
- Katalog Git (.git): Przechowuje podstawowe dane, w tym obiekty, konfigurację i dzienniki.
- Commits (zatwierdzenia): Zapis zmian z metadanymi, tworzący historię projektu.
- Gałęzie: Wskaźniki do konkretnych commitów, które umożliwiają równoległy rozwój.
- Tagi: Nazwane odniesienia do konkretnych commitów, zwykle do oznaczania wydań.
- Remotes: Odniesienia do repozytoriów hostowanych gdzie indziej w celu współpracy.
- Obiekty: Podstawowe komponenty Git, w tym obiekty blob, drzewa i zatwierdzenia.
Zrozumienie tej struktury pozwala efektywnie poruszać się po repozytorium Git i zarządzać nim, zapewniając płynną współpracę i kontrolę wersji w trakcie rozwoju projektu.