Repozytorium Git — to przechowalnia kodu źródłowego projektu, w której Git śledzi każdą zmianę plików przez cały czas trwania prac. Repozytorium zawiera pełną historię commitów, gałęzi i tagów, co pozwala programistom wspólnie pracować nad kodem. Według danych Git, 2024, repozytorium jest podstawą każdego systemu kontroli wersji i jest używane w milionach projektów na całym świecie.
Najważniejsze
Repozytorium Git — to struktura danych, w której system kontroli wersji przechowuje metadane i obiekty opisujące historię zmian plików projektu. Gdy programista inicjalizuje repozytorium poleceniem git init, Git tworzy ukryty folder .git w katalogu głównym projektu.
Wewnątrz tego folderu znajdują się wszystkie obiekty, referencje i pliki konfiguracyjne niezbędne do działania systemu. Repozytorium nie jest przypisane do konkretnej lokalizacji — programista może utworzyć je lokalnie, a następnie połączyć ze zdalnym serwerem.
Git wykorzystuje model rozproszonego repozytorium: każdy uczestnik projektu ma pełną kopię historii na swoim komputerze. Oznacza to, że większość operacji — commit, przeglądanie historii, tworzenie gałęzi — wykonywana jest lokalnie bez dostępu do serwera.
Według danych dokumentacji Git, rozproszona architektura sprawia, że system jest odporny na awarie: jeśli serwer ulegnie awarii, każde lokalne repozytorium może stać się źródłem do przywrócenia pełnej historii projektu.
Repozytorium lokalne — to kopia projektu na komputerze programisty. Zawiera całą historię commitów, gałęzi i tagów oraz umożliwia wykonywanie operacji commit, branch, merge i rebase bez połączenia z siecią.
Repozytorium zdalne jest hostowane na serwerze i służy jako punkt synchronizacji dla wszystkich członków zespołu. Programiści wysyłają swoje zmiany poleceniem git push i pobierają zmiany innych poleceniem git pull.
Połączenie między repozytorium lokalnym a zdalnym konfiguruje się przez remote origin — adres URL serwera przechowywany w konfiguracji Git. Jedno lokalne repozytorium może być połączone z wieloma zdalnymi, co jest przydatne podczas pracy z forkami.
Główną zaletą takiego modelu jest to, że programista może pracować nad kodem w trybie offline, a synchronizować zmiany dopiero po przygotowaniu wyników do wysłania.
| Cecha | Lokalne | Zdalne |
|---|---|---|
| Lokalizacja | Na komputerze programisty | Na serwerze (GitHub, GitLab) |
| Dostęp bez sieci | Pełny dostęp do wszystkich operacji | Niedostępne bez połączenia |
| Synchronizacja | Push/Pull ze zdalnym | Przyjmuje push od lokalnych |
| Kopia zapasowa | Niechronione przed utratą danych | Przechowywane na serwerze z backupami |
Model przechowywania Git zasadniczo różni się od innych systemów kontroli wersji. Zamiast przechowywania listy zmian (delta) między wersjami, Git przechowuje pełne migawki wszystkich plików projektu w momencie każdego commita.
Każdy obiekt w repozytorium jest identyfikowany przez unikalny skrót SHA-1 o długości 40 znaków. Jeśli zawartość pliku nie zmieniła się między commitami, Git nie tworzy nowego obiektu, ale ponownie wykorzystuje istniejący — oszczędza to miejsce.
Git używa czterech typów obiektów: blob (zawartość pliku), tree (struktura katalogu), commit (migawka z metadanymi) i tag (nazwana referencja do commita). Wszystkie obiekty są przechowywane w folderze .git/objects.
Według danych Git Internals, model obiektowy Git zapewnia integralność danych: każda zmiana zawartości pliku powoduje nowy skrót, co uniemożliwia niezauważalną modyfikację historii.
Folder .git — to serce repozytorium. Bez niego Git nie może śledzić zmian, a zwykły katalog pozostaje tylko zbiorem plików. Zrozumienie struktury tego folderu pomaga diagnozować problemy z repozytorium.
Plik HEAD zasługuje na szczególną uwagę. W normalnym stanie zawiera symboliczną referencję do gałęzi, na przykład ref: refs/heads/main. W stanie detached HEAD wskazuje bezpośrednio na commit — oznacza to, że nowe commity nie będą przypisane do żadnej gałęzi.
Praca z repozytorium Git obejmuje zestaw podstawowych operacji, które programista wykonuje codziennie. Każda operacja zmienia stan repozytorium, dodając nowe obiekty lub przesuwając referencje.
Operacje push i pull — to jedyne, które wymagają połączenia ze zdalnym serwerem. Wszystkie pozostałe operacje są wykonywane całkowicie lokalnie, co zapewnia wysoką szybkość działania nawet przy dużej historii.
Każdy plik w repozytorium przechodzi przez cztery stany: untracked (nieśledzony), modified (zmodyfikowany), staged (przygotowany) i committed (zatwierdzony). Git śledzi tylko pliki, które zostały jawnie dodane przez git add lub już znajdują się w historii commitów.
Zrozumienie tego modelu — klucz do efektywnej pracy z Git. Programista może wybiórczo przygotowywać do commita tylko część zmodyfikowanych plików, tworząc logicznie kompletne commity z przejrzystym opisem.
Repozytoria zdalne są zwykle hostowane na specjalistycznych platformach, które zapewniają interfejs webowy, system zarządzania dostępem i dodatkowe narzędzia do wspólnego tworzenia oprogramowania.
Wybór platformy zależy od wielkości zespołu, wymagań dotyczących prywatności i potrzebnych integracji. Do tworzenia aplikacji mobilnych często wybiera się GitHub ze względu na szerokie wsparcie społeczności i integrację z narzędziami CI/CD dla iOS i Android.
Rozważmy praktyczny scenariusz: programista klonuje istniejące repozytorium, tworzy nową gałąź, wprowadza zmiany i wysyła je na serwer. Każde polecenie demonstruje pracę z różnymi komponentami repozytorium.
# Klonowanie zdalnego repozytorium
git clone https://github.com/user/mobile-app.git
# Przejście do katalogu projektu
cd mobile-app
# Utworzenie nowej gałęzi feature i przełączenie się na nią
git checkout -b feature/auth
# Sprawdzenie statusu zmodyfikowanych plików
git status
# Dodanie wszystkich zmian do staging area
git add .
# Utworzenie commita z opisem
git commit -m "Add authentication module"
# Wysłanie zmian do zdalnego repozytorium
git push origin feature/auth
Polecenie git status — jedno z najbardziej przydatnych w codziennej pracy. Pokazuje, które pliki zostały zmodyfikowane, które są przygotowane do commita, a które w ogóle nie są śledzone przez Git.
Do analizy historii repozytorium używane jest polecenie git log z różnymi flagami formatowania. Wyświetla chronologię commitów, ich autorów, daty i identyfikatory SHA-1.
# Wyświetlenie historii z wizualizacją grafu gałęzi
git log --oneline --graph --all
# Wyświetlenie zmian w konkretnym commicie
git show a1b2c3d
# Porównanie bieżącego stanu z ostatnim commitem
git diff HEAD
# Wyświetlenie historii konkretnego pliku
git log --follow src/MainActivity.kt
Flaga --graph wyświetla ASCII-wykres rozgałęzień, co jest szczególnie przydatne w repozytoriach z aktywną pracą w wielu gałęziach. Dla projektów mobilnych z częstymi wydaniami wizualny wykres pomaga szybko ocenić strukturę rozwoju.
Często zadawane pytania
Repozytorium — to techniczne przechowalnia kodu z historią zmian. Projekt — to szersze pojęcie, które obejmuje repozytorium, system zarządzania zadaniami, dokumentację i procesy programistyczne. Jeden projekt może zawierać wiele repozytoriów.
Utwórz nowe repozytorium przez interfejs webowy GitHub, klikając przycisk New. Podaj nazwę, opis i poziom dostępu. Następnie sklonuj repozytorium na lokalny komputer lub połącz je z istniejącym lokalnym repozytorium przez git remote add origin.
Jeśli zdalne repozytorium zostało usunięte z serwera, ale co najmniej jeden programista ma lokalną kopię, repozytorium można odzyskać. Wystarczy utworzyć nowe zdalne repozytorium i wykonać git push --force z lokalnej kopii zawierającej całą historię.
Fork — to kopia cudzego repozytorium na twoim koncie. Otrzymujesz pełną kopię historii i możesz wprowadzać dowolne zmiany bez wpływu na oryginał. Forki są używane do uczestnictwa w projektach open-source przez Pull Request.
Użyj git gc do kompresji obiektów i usunięcia nieosiągalnych danych. Usuń duże pliki z historii przez git filter-branch lub git filter-repo. Dla projektów z plikami binarnymi rozważ Git LFS (Large File Storage).
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również