
# Git

Rudel använder PHP-inbyggda Git-åtgärder via Pitmaster. Värdens binärfil för `git` behövs inte. Fjärrlager nås via HTTP(S) eller SSH.

Varje sandlåda har ett enda grennamn, `rudel/{sandbox-id}`, som används av alla Git-arbetsflöden nedan.

## Klona ett fjärrlager till en ny sandlåda

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

Rudel skapar sandlådan, klonar fjärrlagret till `themes/my-theme` i sandlådans katalog (katalognamnet är lagrets namn), skapar grenen `rudel/{id}` från standardgrenen och checkar ut den. Med `--type=plugin` sker utcheckningen i `plugins/my-theme` i stället. Fjärrlagret, katalogen och basgrenen sparas i sandlådan för senare pushar. Om kloningen misslyckas behålls sandlådan och kommandot visar en varning.

Utcheckningen är en arbetskopia för `wp rudel push`. I den aktuella versionen tillhandahåller sandlådan den inte ([ärende #11](https://github.com/inline0/rudel/issues/11)):

- Sandlådan använder temat som valts med `--theme`, eller värdens aktiva tema, kopierat från värden när sandlådan skapas. `--theme` måste ange ett tema som är installerat på värden, så en utcheckning används bara om lagrets namn motsvarar den sluggen och kloningen sedan skriver till den kopierade temakatalogen.
- Tillägg läses alltid in från värdens tilläggskatalog, så en `--type=plugin`-utcheckning körs aldrig.

## Länkade arbetskataloger

När du klonar en sandlåda vars temakatalog är ett Git-lager skapar Rudel en länkad arbetskatalog för den nya sandlådan i stället för att kopiera filer:

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

Arbetskatalogen ligger på grenen `rudel/{new-id}`. Rudel registrerar den i den nya sandlådans metadata under ett uttryckligt arbetskatalognamn baserat på sandlådans ID, innehållstyp och temaslug, så att två sandlådor med samma temaslug inte krockar. När sandlådan tas bort raderas arbetskatalogen och dess gren.

`wp rudel cleanup --merged` tar bara hänsyn till dessa länkade arbetskataloger. Se [Rensning](https://rudel.inline0.dev/sv/docs/features/cleanup).

## Skicka ändringar

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

`push` checkar in alla ändringar i utcheckningen och skickar grenen `rudel/{id}` till `origin`. Det returnerar `No changes to push.` om inget har ändrats.

- `--git=<remote>` anger fjärrlagret om inget har sparats; efter den första lyckade pushen sparas det.
- `--dir=<dir>` väljer katalogen relativt till sandlådans katalog, till exempel `themes/my-theme`. Som standard används katalogen som sparats av `--git`, annars hela sandlådans katalog.
- `--message` har som standard värdet `Update from Rudel sandbox`.

Från PHP gör `Rudel::push( $id, $remote_url, $message, $subdir )` samma sak och kör `rudel_*_environment_push`-hookarna.

## Incheckningsidentitet

Om utcheckningen saknar `user.name` eller `user.email` i sin Git-konfiguration skriver Rudel in `Rudel` och `rudel@localhost`. Ange `RUDEL_GIT_AUTHOR_NAME` och `RUDEL_GIT_AUTHOR_EMAIL` i `wp-config.php` för att använda andra värden.
