
# Git

Rudel používa operácie PHP-native Git prostredníctvom Pitmaster. Nevyžaduje binárny súbor `git` hostiteľa. Vzdialené repozitáre sú dostupné cez HTTP(S) alebo SSH.

Každý sandbox má jeden názov vetvy, `rudel/{sandbox-id}`, ktorý používajú všetky nižšie uvedené pracovné postupy Git.

## Klonovanie vzdialeného repozitára do nového sandboxu

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

Rudel vytvorí sandbox, naklonuje vzdialený repozitár do `themes/my-theme` v adresári sandboxu (názov adresára je názov repozitára), vytvorí vetvu `rudel/{id}` z predvolenej vetvy a prepne sa na ňu. Pomocou `--type=plugin` sa namiesto toho repozitár naklonuje do `plugins/my-theme`. Vzdialený repozitár, adresár a základná vetva sa uložia do sandboxu na neskoršie odosielanie zmien. Ak klonovanie zlyhá, sandbox sa zachová a príkaz vypíše upozornenie.

Pracovná kópia slúži na prácu s `wp rudel push`. V aktuálnom vydaní ju sandbox neposkytuje ([problém č. 11](https://github.com/inline0/rudel/issues/11)):

- Sandbox poskytuje tému vybranú pomocou `--theme` alebo aktívnu tému hostiteľa, skopírovanú z hostiteľa pri vytvorení sandboxu. `--theme` musí označovať tému nainštalovanú na hostiteľovi. Pracovná kópia sa teda poskytuje len vtedy, keď sa názov repozitára zhoduje s týmto slugom a klonovanie zapisuje do skopírovaného adresára témy.
- Doplnky sa vždy načítavajú z adresára doplnkov hostiteľa, preto sa pracovná kópia `--type=plugin` nikdy nespustí.

## Prepojené pracovné stromy

Keď klonujete sandbox, ktorého adresár témy je repozitárom Git, Rudel namiesto kopírovania súborov vytvorí pre nový sandbox prepojený pracovný strom:

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

Pracovný strom je na vetve `rudel/{new-id}`. Rudel ho zaznamená v metadátach nového sandboxu pod výslovným názvom pracovného stromu založeným na ID sandboxu, type obsahu a slugu témy, aby sa sandboxy používajúce rovnaký slug témy nedostali do konfliktu. Zničením sandboxu sa odstráni pracovný strom aj jeho vetva.

`wp rudel cleanup --merged` zohľadňuje iba tieto prepojené pracovné stromy. Pozrite si časť [Čistenie](https://rudel.inline0.dev/sk/docs/features/cleanup).

## Odoslanie zmien

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

`push` potvrdí každú zmenu v pracovnej kópii a odošle vetvu `rudel/{id}` do `origin`. Ak sa nič nezmenilo, vráti `No changes to push.`.

- `--git=<remote>` nastaví vzdialený repozitár, ak ešte nie je uložený; po prvom úspešnom odoslaní sa zapamätá.
- `--dir=<dir>` vyberie adresár relatívne k adresáru sandboxu, napríklad `themes/my-theme`. Predvolene sa použije adresár uložený pomocou `--git`, inak celý adresár sandboxu.
- `--message` má predvolenú hodnotu `Update from Rudel sandbox`.

Z PHP vykoná `Rudel::push( $id, $remote_url, $message, $subdir )` to isté a spustí hooky `rudel_*_environment_push`.

## Identita potvrdení zmien

Ak v konfigurácii Git pracovnej kópie chýba `user.name` alebo `user.email`, Rudel zapíše `Rudel` a `rudel@localhost`. Ak chcete použiť iné hodnoty, definujte `RUDEL_GIT_AUTHOR_NAME` a `RUDEL_GIT_AUTHOR_EMAIL` v `wp-config.php`.
