
# Git

Rudel kasutab PHP-põhiseid Git toiminguid Pitmaster kaudu. Hosti `git` binaarfaili pole vaja. Kaugühendused luuakse HTTP(S) või SSH kaudu.

Igal liivakastil on üks haru nimi, `rudel/{sandbox-id}`, mida kasutavad kõik allpool kirjeldatud Git töövood.

## Kaughoidla kloonimine uude liivakasti

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

Rudel loob liivakasti, kloonib kaughoidla liivakasti kataloogis asukohta `themes/my-theme` (kataloogi nimi on hoidla nimi), loob vaikeharust haru `rudel/{id}` ja lülitub sellele. Käsuga `--type=plugin` suunatakse töökoopia hoopis asukohta `plugins/my-theme`. Kaughoidla, kataloog ja baas haru salvestatakse liivakasti hilisemate üleslaadimiste jaoks. Kui kloonimine nurjub, jäetakse liivakast alles ja käsk kuvab hoiatuse.

Töökoopia on mõeldud kasutamiseks `wp rudel push` jaoks. Praeguses versioonis liivakast seda ei serveeri ([probleem nr 11](https://github.com/inline0/rudel/issues/11)):

- Liivakast serveerib käsuga `--theme` valitud teemat või hosti aktiivset teemat, mis kopeeritakse hostist liivakasti loomisel. `--theme` peab viitama hosti installitud teemale, seega serveeritakse töökoopiat ainult siis, kui hoidla nimi vastab selle tunnusele ja kloon kirjutab kopeeritud teemakataloogi.
- Pistikprogrammid laaditakse alati hosti pistikprogrammide kataloogist, seega `--type=plugin` töökoopia ei käivitu.

## Seotud töökataloogid

Kui kloonite liivakasti, mille teemakataloog on Git hoidla, loob Rudel failide kopeerimise asemel uue liivakasti jaoks seotud töökataloogi:

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

Töökataloog asub harus `rudel/{new-id}`. Rudel salvestab selle uue liivakasti metaandmetesse selgesõnalise töökataloogi nimega, mis põhineb liivakasti ID-l, sisutüübil ja teema tunnusel, et kaks sama teema tunnusega liivakasti ei satuks konflikti. Liivakasti hävitamisel eemaldatakse töökataloog ja kustutatakse selle haru.

`wp rudel cleanup --merged` arvestab ainult neid seotud töökatalooge. Vt [Puhastamine](https://rudel.inline0.dev/et/docs/features/cleanup).

## Muudatuste üleslaadimine

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

`push` salvestab kõik töökoopia muudatused sisse ja laadib haru `rudel/{id}` üles asukohta `origin`. Muudatuste puudumisel tagastab see väärtuse `No changes to push.`.

- `--git=<remote>` määrab kaughoidla, kui seda pole salvestatud; pärast esimest edukat üleslaadimist jäetakse see meelde.
- `--dir=<dir>` määrab liivakasti kataloogi suhtes asuva kataloogi, näiteks `themes/my-theme`. Vaikimisi kasutatakse käsuga `--git` salvestatud kataloogi või muul juhul kogu liivakasti kataloogi.
- `--message` vaikeväärtus on `Update from Rudel sandbox`.

Käsust PHP käivitades teeb `Rudel::push( $id, $remote_url, $message, $subdir )` sama ja käivitab `rudel_*_environment_push` hookid.

## Sisseseadmise identiteet

Kui töökoopias pole Git konfiguratsioonis `user.name` ega `user.email`, kirjutab Rudel sinna väärtused `Rudel` ja `rudel@localhost`. Teiste väärtuste kasutamiseks määrake failis `wp-config.php` `RUDEL_GIT_AUTHOR_NAME` ja `RUDEL_GIT_AUTHOR_EMAIL`.
