
# Git

Rudel bruger PHP-baserede Git-handlinger via Pitmaster. Den kræver ikke værtens `git`-binærfil. Fjernlagre tilgås via HTTP(S) eller SSH.

Hver sandkasse har ét grennavn, `rudel/{sandbox-id}`, som bruges i alle Git-arbejdsgangene nedenfor.

## Klon et fjernlager til en ny sandkasse

```bash
wp rudel create --name=feature-x --git=https://example.test/my-theme.git
```

Rudel opretter sandkassen, kloner fjernlageret til `themes/my-theme` i sandkassemappen (mappens navn er repositoryets navn), opretter grenen `rudel/{id}` fra standardgrenen og checker den ud. Med `--type=plugin` placeres checkout i `plugins/my-theme` i stedet. Fjernlageret, mappen og basisgrenen gemmes på sandkassen til senere pushes. Hvis kloningen mislykkes, bevares sandkassen, og kommandoen viser en advarsel.

Checkouten er en arbejdskopi til `wp rudel push`. I den aktuelle version viser sandkassen den ikke ([issue #11](https://github.com/inline0/rudel/issues/11)):

- Sandkassen viser temaet, der er valgt med `--theme`, eller værtens aktive tema, kopieret fra værten, da sandkassen blev oprettet. `--theme` skal angive et tema, der er installeret på værten, så en checkout kun vises, når repositoryets navn svarer til dette slug, og kloningen derefter skriver til den kopierede temamappe.
- Plugins indlæses altid fra værtens pluginmappe, så en `--type=plugin`-checkout køres aldrig.

## Tilknyttede worktrees

Når du kloner en sandkasse, hvis temamappe er et Git-repository, opretter Rudel et tilknyttet worktree til den nye sandkasse i stedet for at kopiere filer:

```bash
wp rudel create --name=feature-y --clone-from=feature-x-3be7
```

Worktree'et er på grenen `rudel/{new-id}`. Rudel registrerer det i den nye sandkasses metadata under et eksplicit worktree-navn baseret på sandkasse-ID, indholdstype og temaslug, så to sandkasser med samme temaslug ikke kolliderer. Når sandkassen slettes, fjernes worktree'et, og dens gren slettes.

`wp rudel cleanup --merged` tager kun disse tilknyttede worktrees i betragtning. Se [Oprydning](https://rudel.inline0.dev/da/docs/features/cleanup).

## Push ændringer

```bash
wp rudel push feature-x-3be7 --message="Update checkout template"
```

`push` committer alle ændringer i checkouten og pusher grenen `rudel/{id}` til `origin`. Den returnerer `No changes to push.`, hvis intet er ændret.

- `--git=<remote>` angiver fjernlageret, hvis intet er gemt; efter det første vellykkede push huskes det.
- `--dir=<dir>` vælger mappen i forhold til sandkassemappen, f.eks. `themes/my-theme`. Som standard bruges mappen, der er gemt af `--git`, eller hele sandkassemappen, hvis ingen er gemt.
- `--message` har som standard værdien `Update from Rudel sandbox`.

Fra PHP gør `Rudel::push( $id, $remote_url, $message, $subdir )` det samme og udløser hooks for `rudel_*_environment_push`.

## Commit-identitet

Hvis checkouten ikke har `user.name` eller `user.email` i sin Git-konfiguration, skriver Rudel `Rudel` og `rudel@localhost`. Definer `RUDEL_GIT_AUTHOR_NAME` og `RUDEL_GIT_AUTHOR_EMAIL` i `wp-config.php` for at bruge andre værdier.
