Git-repository — är en lagringsplats för projektets källkod, där Git spårar varje filändring under hela utvecklingen. Repositoryt innehåller den fullständiga historiken över commits, grenar och taggar, vilket gör att utvecklare kan arbeta tillsammans på koden. Enligt data från Git, 2024 är repositoryt grunden för alla versionshanteringssystem och används i miljontals projekt världen över.
Huvudpunkter
Git-repository — är en datastruktur där versionshanteringssystemet lagrar metadata och objekt som beskriver ändringshistoriken för projektets filer. När en utvecklare initierar ett repository med kommandot git init, skapar Git en dold mapp .git i projektets rot.
Inuti denna mapp finns alla objekt, referenser och konfigurationsfiler som krävs för systemets funktion. Repositoryt är inte bundet till en specifik plats — utvecklaren kan skapa det lokalt och sedan ansluta det till en fjärrserver.
Git använder modellen för distribuerat repository: varje deltagare i projektet har en fullständig kopia av historiken på sin egen dator. Detta innebär att de flesta operationerna — commit, historikvisning, skapande av grenar — utförs lokalt utan att kontakta servern.
Enligt Git-dokumentationen gör den distribuerade arkitekturen systemet motståndskraftigt mot fel: om servern kraschar kan vilket lokalt repository som helst bli en källa för att återställa projektets fullständiga historik.
Lokalt repository — är en kopia av projektet på utvecklarens dator. Det innehåller hela historiken över commits, grenar och taggar och gör det möjligt att utföra commit-, branch-, merge- och rebase-operationer utan nätverksanslutning.
Fjärranslutet repository är värd på en server och fungerar som en synkroniseringspunkt för alla teammedlemmar. Utvecklare skickar sina ändringar med kommandot git push och hämtar andras ändringar med kommandot git pull.
Anslutningen mellan lokalt och fjärranslutet repository konfigureras via remote origin — serverns URL som lagras i Git-konfigurationen. Ett lokalt repository kan anslutas till flera fjärranslutna repositories, vilket är användbart vid arbete med forks.
Den främsta fördelen med denna modell är att utvecklaren kan arbeta med koden offline och synkronisera ändringarna endast när hen är redo att skicka resultatet.
| Egenskap | Lokalt | Fjärranslutet |
|---|---|---|
| Plats | På utvecklarens dator | På server (GitHub, GitLab) |
| Åtkomst utan nätverk | Full åtkomst till alla operationer | Inte tillgängligt utan anslutning |
| Synkronisering | Push/Pull med fjärranslutet | Tar emot push från lokala |
| Säkerhetskopia | Inte skyddat mot dataförlust | Lagras på server med säkerhetskopior |
Gits lagringsmodell skiljer sig fundamentalt från andra versionshanteringssystem. Istället för att lagra en lista över ändringar (delta) mellan versioner, lagrar Git fullständiga ögonblicksbilder av alla projektfiler vid tidpunkten för varje commit.
Varje objekt i repositoryt identifieras av en unik SHA-1-hash på 40 tecken. Om innehållet i en fil inte har ändrats mellan commits, skapar Git inte ett nytt objekt utan återanvänder det befintliga — detta sparar utrymme.
Git använder fyra objekttyper: blob (filinnehåll), tree (katalogstruktur), commit (ögonblicksbild med metadata) och tag (namngiven referens till en commit). Alla objekt lagras i mappen .git/objects.
Enligt Git Internals säkerställer Gits objektmodell dataintegritet: varje ändring av filinnehåll leder till en ny hash, vilket gör det omöjligt att obemärkt ändra historiken.
Mappen .git — är repositoryts hjärta. Utan den kan Git inte spåra ändringar, och en vanlig katalog förblir bara en samling filer. Att förstå strukturen i denna mapp hjälper till att diagnostisera problem med repositoryt.
Fil HEAD förtjänar särskild uppmärksamhet. I normalt tillstånd innehåller den en symbolisk referens till en gren, till exempel ref: refs/heads/main. I tillståndet detached HEAD pekar den direkt på en commit — detta innebär att nya commits inte kommer att vara kopplade till någon gren.
Arbete med Git-repositoryt omfattar en uppsättning grundläggande operationer som en utvecklare utför dagligen. Varje operation ändrar repositoryts tillstånd, lägger till nya objekt eller flyttar referenser.
Operationerna push och pull — är de enda som kräver anslutning till fjärrservern. Alla andra operationer utförs helt lokalt, vilket säkerställer hög arbetshastighet även med en stor historik.
Varje fil i repositoryt går igenom fyra tillstånd: untracked (ej spårad), modified (ändrad), staged (förberedd) och committed (committad). Git spårar endast filer som uttryckligen har lagts till via git add eller redan finns i commit-historiken.
Att förstå denna modell — nyckeln till effektivt arbete med Git. Utvecklaren kan selektivt förbereda endast en del av de ändrade filerna för commit, vilket skapar logiskt fullständiga commits med tydliga beskrivningar.
Fjärranslutna repositories är vanligtvis värd på specialiserade plattformar som tillhandahåller webbgränssnitt, åtkomsthanteringssystem och ytterligare verktyg för samarbetsutveckling.
Valet av plattform beror på teamets storlek, integritetskrav och nödvändiga integrationer. För mobilutveckling väljs ofta GitHub på grund av dess breda community-stöd och integration med CI/CD-verktyg för iOS och Android.
Låt oss titta på ett praktiskt scenario: en utvecklare klonar ett befintligt repository, skapar en ny gren, gör ändringar och skickar dem till servern. Varje kommando demonstrerar arbete med olika komponenter i repositoryt.
# Kloning av fjärranslutet repository
git clone https://github.com/user/mobile-app.git
# Navigera till projektkatalogen
cd mobile-app
# Skapa en ny feature-gren och växla till den
git checkout -b feature/auth
# Kontrollera status för ändrade filer
git status
# Lägga till alla ändringar i staging area
git add .
# Skapa en commit med beskrivning
git commit -m "Add authentication module"
# Skicka ändringar till fjärranslutet repository
git push origin feature/auth
Kommandot git status — ett av de mest användbara i dagligt arbete. Det visar vilka filer som har ändrats, vilka som är förberedda för commit och vilka som inte alls spåras av Git.
För att analysera repositoryts historik används kommandot git log med olika formateringsflaggor. Det visar kronologin för commits, deras författare, datum och SHA-1-identifierare.
# Visa historik med visualisering av gengraf
git log --oneline --graph --all
# Visa ändringar i en specifik commit
git show a1b2c3d
# Jämföra aktuell status med senaste commiten
git diff HEAD
# Visa historik för en specifik fil
git log --follow src/MainActivity.kt
Flaggan --graph visar en ASCII-graf över förgreningar, vilket är särskilt användbart i repositories med aktivt arbete i flera grenar. För mobilprojekt med frekventa releaser hjälper den visuella grafen att snabbt bedöma utvecklingsstrukturen.
Vanliga frågor
Repository — är en teknisk lagringsplats för kod med ändringshistorik. Projekt — är ett bredare begrepp som omfattar repositoryt, uppgiftshanteringssystemet, dokumentation och utvecklingsprocesser. Ett projekt kan innehålla flera repositories.
Skapa ett nytt repository via GitHub-webbgränssnittet genom att klicka på knappen New. Ange namn, beskrivning och åtkomstnivå. Klona sedan repositoryt till den lokala datorn eller anslut ett befintligt lokalt repository via git remote add origin.
Om det fjärranslutna repositoryt har tagits bort från servern, men minst en utvecklare har en lokal kopia, kan repositoryt återställas. Skapa helt enkelt ett nytt fjärranslutet repository och kör git push --force från den lokala kopian med hela historiken.
Fork — är en kopia av någon annans repository på ditt konto. Du får en fullständig kopia av historiken och kan göra alla ändringar utan att påverka originalet. Forks används för att delta i open-source-projekt via Pull Requests.
Använd git gc för att komprimera objekt och ta bort oåtkomliga data. Ta bort stora filer från historiken via git filter-branch eller git filter-repo. För projekt med binära filer, överväg Git LFS (Large File Storage).
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också