
# Git

Rudel naudoja PHP pagrįstas Git operacijas per Pitmaster. Pagrindinio kompiuterio `git` dvejetainio failo nereikia. Nuotolinės saugyklos pasiekiamos per HTTP(S) arba SSH.

Kiekviena smėlio dėžė turi vieną šakos pavadinimą – `rudel/{sandbox-id}`, kurį naudoja visos toliau aprašytos Git darbo eigos.

## Nuotolinės saugyklos klonavimas į naują smėlio dėžę

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

Rudel sukuria smėlio dėžę, klonuoja nuotolinę saugyklą į `themes/my-theme` smėlio dėžės kataloge (katalogo pavadinimas sutampa su saugyklos pavadinimu), sukuria šaką `rudel/{id}` pagal numatytąją šaką ir ją išsiregistruoja. Naudojant `--type=plugin`, išsiregistravimas atliekamas į `plugins/my-theme`. Nuotolinės saugyklos, katalogo ir bazinės šakos duomenys išsaugomi smėlio dėžėje, kad vėliau būtų galima įkelti pakeitimus. Jei klonavimas nepavyksta, smėlio dėžė paliekama, o komanda pateikia įspėjimą.

Šis darbinis katalogas yra darbinė `wp rudel push` kopija. Dabartinėje laidoje smėlio dėžė jo neteikia ([problema #11](https://github.com/inline0/rudel/issues/11)):

- Smėlio dėžė naudoja temą, pasirinktą su `--theme`, arba pagrindinio kompiuterio aktyvią temą, nukopijuotą iš jo kuriant smėlio dėžę. `--theme` turi nurodyti pagrindiniame kompiuteryje įdiegtą temą, todėl darbinis katalogas bus naudojamas tik tada, jei saugyklos pavadinimas sutaps su tos temos identifikatoriumi ir klonuojant failai bus įrašyti į nukopijuotą temos katalogą.
- Papildiniai visada įkeliami iš pagrindinio kompiuterio papildinių katalogo, todėl `--type=plugin` darbinis katalogas niekada nevykdomas.

## Susieti darbiniai medžiai

Kai klonuojate smėlio dėžę, kurios temos katalogas yra Git saugykla, Rudel užuot kopijavęs failus sukuria naujai smėlio dėžei susietą darbinį medį:

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

Darbinis medis yra šakoje `rudel/{new-id}`. Rudel įrašo jį į naujos smėlio dėžės metaduomenis, suteikdamas aiškų pavadinimą pagal smėlio dėžės ID, turinio tipą ir temos identifikatorių, kad nesusidurtų dvi smėlio dėžės, naudojančios tą patį temos identifikatorių. Sunaikinus smėlio dėžę, darbinis medis pašalinamas, o jo šaka ištrinama.

`wp rudel cleanup --merged` atsižvelgia tik į šiuos susietus darbinius medžius. Žr. [Valymas](https://rudel.inline0.dev/lt/docs/features/cleanup).

## Pakeitimų įkėlimas

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

`push` patvirtina visus darbinio katalogo pakeitimus ir įkelia šaką `rudel/{id}` į `origin`. Jei pakeitimų nėra, grąžinama `No changes to push.`.

- `--git=<remote>` nustato nuotolinę saugyklą, jei ji dar neišsaugota; po pirmojo sėkmingo įkėlimo ji įsimenama.
- `--dir=<dir>` parenka katalogą, nurodytą santykiniu keliu nuo smėlio dėžės katalogo, pavyzdžiui, `themes/my-theme`. Numatyta naudojamas katalogas, išsaugotas su `--git`, o jei jo nėra – visas smėlio dėžės katalogas.
- `--message` numatytoji reikšmė yra `Update from Rudel sandbox`.

Iš PHP `Rudel::push( $id, $remote_url, $message, $subdir )` atlieka tą patį veiksmą ir iškviečia `rudel_*_environment_push` kabliukus.

## Pateikėjo tapatybė

Jei darbinio katalogo Git konfigūracijoje nėra `user.name` arba `user.email`, Rudel įrašo `Rudel` ir `rudel@localhost`. Norėdami naudoti kitas reikšmes, faile `wp-config.php` apibrėžkite `RUDEL_GIT_AUTHOR_NAME` ir `RUDEL_GIT_AUTHOR_EMAIL`.
