View on GitHub

Meta-Repository Workshop

Mono-repo eller mange repo? Prøv meta-repo! - JavaZone 2025

Oppgave 2: Oppsett og grunnleggende struktur

📋 Mål

I denne oppgaven skal du:

📚 Bakgrunn

Et meta-repository fungerer som et kontrollsenter for flere Git-repositories. Det inneholder ingen applikasjonskode, men scripts og konfigurasjon for å administrere andre repos.

🛠 Steg-for-steg

Steg 1: Starte fra tomt repo

Åpne terminal/kommandolinje i ditt favorittverktøy.

Deretter:

cd <something> # til der du vil opprette et repo vi skal jobbe i

La oss starte med å klone vårt tomme repo:

git clone https://github.com/kjetiljd/todo-meta.git

Steg 2: Opprette meta-repo

Gå inn i prosjekt-mappen:

cd todo-meta

Det kan se tomt ut her:

ls 

Men det er et git-repo:

ls -al 

På Mac/Linux skjules filer som starter med . så vi trenger -a for å vise at det har dukket opp en .meta-fil.

Repoet er ikke helt tomt, det finnes noen branch’er vi kan bruke hvis ting går galt.

Dersom du velger å bruke Docker er det nå du starter Docker-containeren og jobber videre inne i den:

Ekspander for Docker-container-instruksjon

Start container slik (denne gang tar vi med git name/email):

Windows (powershell):

$gitUserName = try { git config user.name } catch { "" }
$gitUserEmail = try { git config user.email } catch { "" }

docker run --rm -it `
  -v "$($PWD.Path):/work" -w /work `
  -e "GIT_USER_NAME=$gitUserName" `
  -e "GIT_USER_EMAIL=$gitUserEmail" `
  ghcr.io/kjetiljd/meta-repo-workshop-tools:latest bash

Mac/Linux/…:

docker run --rm -it \
  -v "$PWD:/work" -w /work \
  -e "GIT_USER_NAME=$(git config user.name || echo '')" \
  -e "GIT_USER_EMAIL=$(git config user.email || echo '')" \
  ghcr.io/kjetiljd/meta-repo-workshop-tools:latest bash

Merk at inne i Docker-containeren heter mappen /work, ikke todo-meta.


Gjør mappen til et meta-prosjekt slik:

meta init

Nå ble det opprettet en .meta-fil.

ls -al

La oss titte på den.

cat .meta # eller tilsvarende kommando for å se innhold i filer

Det ser ut som om dette er JSON.

Steg 3: Legge til sub-repo

Vårt demo-system har (bare!) tre komponenter:

Nå skal vi legge til disse i meta-prosjektet vårt.

Begynn med å forstå hvordan meta-kommandoen fungerer.

meta                      # Dette viser deg standard hjelpe-teksten
meta help project         # Her får du hjelp med `project`
meta project help import  # Her får du hjelp med `project import`

Kommandoen vi trenger er på formen: meta project import [folder] [git-url]

Legg til det første repoet, som har git-url: https://github.com/kjetiljd/todo-frontend.git

meta project import todo-frontend https://github.com/kjetiljd/todo-frontend.git

Som du ser så klones repoet, også.

Ta en titt på .meta-filen:

cat .meta # eller tilsvarende kommando for å se innhold i filer

Se også på .gitignore:

cat .gitignore

Mappen med sub-repoet (todo-frontend) er ignorert i det ytre git-prosjektet. git i meta-prosjektet bryr seg ikke om sub-repoene. Dette gir oss en løs kopling mellom meta-repo’et og de andre repoene.

Fortsett med det neste repoet:

meta project import todo-backend https://github.com/kjetiljd/todo-backend.git

Sjekk .meta og .gitignore om de ser ut som forventet:

cat .meta
cat .gitignore

La oss legge til det siste repoet, men gjøre en liten vri

Denne gangen gjør vi en vanlig git clone først:

git clone https://github.com/kjetiljd/todo-sorter.git

Siden vi allerede har klonet repoet, kan vi bruke meta project import uten url denne gangen:

meta project import todo-sorter

Sjekk .meta og .gitignore om de ser ut som forventet:

cat .meta
cat .gitignore

(Dersom vi ikke hadde noe repo i det hele tatt, men skal lage et nytt, kunne vi brukt meta project create [folder] [url].)

Steg 4: Sjekk om vi er oppdatert

Nå skal vi bruke meta git-subkommandoen.

meta git status

Du skal nå få noe som ser slik ut (men med litt farger):

/todo-meta:
On branch main
Your branch is up to date with 'origin/main'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.gitignore
	.meta

nothing added to commit but untracked files present (use "git add" to track)
/todo-meta ✓

todo-frontend:
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean
todo-frontend ✓

todo-backend:
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean
todo-backend ✓

todo-sorter:
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean
todo-sorter ✓

Steg 5: Gjør en commit i meta-repoet

La oss commit’e endringene våre i meta-repoet, siden vi nå har et fungerende meta-repo.

git add .meta .gitignore
git commit -m"Etabler meta-repo"
← Tilbake til oversikt → Neste oppgave: Kommandoer med meta exec