
# Git

Rudel käyttää PHP-natiiveja Git-toimintoja Pitmaster-palvelun kautta. Isännän `git`-binääritiedostoa ei tarvita. Etätietovarastoihin muodostetaan yhteys HTTP(S)- tai SSH-yhteydellä.

Kullakin eristysympäristöllä on yksi haaran nimi, `rudel/{sandbox-id}`, jota käytetään kaikissa alla kuvatuissa Git-työnkuluissa.

## Kloonaa etätietovarasto uuteen eristysympäristöön

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

Rudel luo eristysympäristön, kloonaa etätietovaraston hakemistoon `themes/my-theme` sen sisällä (hakemiston nimi on tietovaraston nimi), luo oletushaarasta haaran `rudel/{id}` ja ottaa sen käyttöön. Valitsimella `--type=plugin` checkout sijoitetaan sen sijaan kohteeseen `plugins/my-theme`. Etätietovarasto, hakemisto ja pohjahaara tallennetaan eristysympäristöön myöhempiä lähetyksiä varten. Jos kloonaus epäonnistuu, eristysympäristö säilytetään ja komento tulostaa varoituksen.

Checkout on kohteen `wp rudel push` työkopio. Nykyisessä julkaisussa eristysympäristö ei tarjoa sitä ([ongelma #11](https://github.com/inline0/rudel/issues/11)):

- Hiekkalaatikossa käytetään teemaa, joka on valittu kohdassa `--theme`, tai palvelimen aktiivista teemaa. Teema kopioidaan palvelimelta hiekkalaatikkoa luotaessa. `--theme`-kohdassa on ilmoitettava palvelimelle asennettu teema, joten uloskirjaus tarjotaan vain, jos tietovaraston nimi vastaa kyseistä tunnusta, ja klooni kirjoittaa sitten kopioituun teemahakemistoon.
- Lisäosat ladataan aina palvelimen lisäosahakemistosta, joten `--type=plugin`-uloskirjaus ei koskaan ole käytössä.

## Linkitetyt työhakemistot

Kun kloonaat hiekkalaatikon, jonka teemahakemisto on Git-tietovarasto, Rudel luo uudelle hiekkalaatikolle linkitetyn työhakemiston tiedostojen kopioinnin sijaan:

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

Työhakemisto on haarassa `rudel/{new-id}`. Rudel tallentaa sen uuden hiekkalaatikon metatietoihin yksilöllisellä työhakemiston nimellä, joka perustuu hiekkalaatikon tunnukseen, sisältötyyppiin ja teeman tunnukseen, jotta kaksi samaa teematunnusta käyttävää hiekkalaatikkoa eivät törmää toisiinsa. Hiekkalaatikon tuhoaminen poistaa työhakemiston ja sen haaran.

`wp rudel cleanup --merged` huomioi vain nämä linkitetyt työhakemistot. Katso [Siivous](https://rudel.inline0.dev/fi/docs/features/cleanup).

## Muutosten lähettäminen

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

`push` tekee commitin kaikista uloskirjauksen muutoksista ja lähettää haaran `rudel/{id}` kohteeseen `origin`. Se palauttaa arvon `No changes to push.`, jos muutoksia ei ole.

- `--git=<remote>` asettaa etäpalvelimen, jos sitä ei ole tallennettu; ensimmäisen onnistuneen lähetyksen jälkeen se muistetaan.
- `--dir=<dir>` valitsee hiekkalaatikkohakemistoon suhteutetun hakemiston, esimerkiksi `themes/my-theme`. Oletuksena käytetään hakemistoa, jonka `--git` tallensi; muussa tapauksessa käytetään koko hiekkalaatikkohakemistoa.
- `--message`-oletusarvo on `Update from Rudel sandbox`.

Komennosta PHP lähtien `Rudel::push( $id, $remote_url, $message, $subdir )` tekee saman ja käynnistää `rudel_*_environment_push`-koukut.

## Commitin tekijän tiedot

Jos uloskirjauksen Git-asetuksissa ei ole arvoa `user.name` tai `user.email`, Rudel kirjoittaa arvot `Rudel` ja `rudel@localhost`. Määritä arvot `RUDEL_GIT_AUTHOR_NAME` ja `RUDEL_GIT_AUTHOR_EMAIL` kohteessa `wp-config.php`, jos haluat käyttää muita arvoja.
