
# Git

Rudel izvaja izvorne operacije Git v PHP prek Pitmaster. Ne potrebuje gostiteljeve izvršljive datoteke `git`. Do oddaljenih repozitorijev dostopa prek HTTP(S) ali SSH.

Vsak peskovnik ima eno ime veje, `rudel/{sandbox-id}`, ki se uporablja v vseh spodnjih potekih dela Git.

## Kloniranje oddaljenega repozitorija v nov peskovnik

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

Rudel ustvari peskovnik, klonira oddaljeni repozitorij v `themes/my-theme` znotraj imenika peskovnika (ime imenika je ime repozitorija), ustvari vejo `rudel/{id}` iz privzete veje in jo prevzame. Z možnostjo `--type=plugin` se prevzem izvede v `plugins/my-theme`. Oddaljeni repozitorij, imenik in osnovna veja se shranijo v peskovnik za poznejše pošiljanje sprememb. Če kloniranje ne uspe, se peskovnik ohrani, ukaz pa izpiše opozorilo.

Prevzeta kopija je delovna kopija za `wp rudel push`. V trenutni izdaji je peskovnik ne streže ([issue #11](https://github.com/inline0/rudel/issues/11)):

- Peskovnik streže temo, izbrano z možnostjo `--theme`, ali aktivno temo gostitelja, ki se kopira z gostitelja ob ustvarjanju peskovnika. Možnost `--theme` mora določiti temo, nameščeno na gostitelju, zato se prevzeta kopija streže le, če se ime repozitorija ujema z oznako teme in kloniranje nato zapiše v kopirani imenik teme.
- Vtičniki se vedno naložijo iz imenika vtičnikov gostitelja, zato se prevzeta kopija `--type=plugin` nikoli ne zažene.

## Povezani delovni imeniki

Ko klonirate peskovnik, katerega imenik s temo je repozitorij Git, Rudel za novi peskovnik ustvari povezan delovni imenik namesto kopije datotek:

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

Delovni imenik je v veji `rudel/{new-id}`. Rudel ga zabeleži v metapodatkih novega peskovnika pod izrecnim imenom delovnega imenika, ki temelji na ID-ju peskovnika, vrsti vsebine in oznaki teme, zato se peskovnika z isto oznako teme ne prekrivata. Ob uničenju peskovnika se delovni imenik odstrani, njegova veja pa izbriše.

`wp rudel cleanup --merged` upošteva samo te povezane delovne imenike. Glejte [Čiščenje](https://rudel.inline0.dev/sl/docs/features/cleanup).

## Pošiljanje sprememb

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

`push` potrdi vse spremembe v prevzeti kopiji in pošlje vejo `rudel/{id}` v `origin`. Če ni sprememb, vrne `No changes to push.`.

- `--git=<remote>` nastavi oddaljeni repozitorij, če še ni shranjen; po prvem uspešnem pošiljanju se shrani.
- `--dir=<dir>` izbere imenik glede na imenik peskovnika, na primer `themes/my-theme`. Privzeto uporabi imenik, shranjen z ukazom `--git`, sicer pa celoten imenik peskovnika.
- `--message` je privzeto nastavljen na `Update from Rudel sandbox`.

V ukazu PHP `Rudel::push( $id, $remote_url, $message, $subdir )` izvede enako in sproži kavlje `rudel_*_environment_push`.

## Identiteta potrjevalca

Če prevzeta kopija v konfiguraciji Git nima `user.name` ali `user.email`, Rudel zapiše `Rudel` in `rudel@localhost`. V `wp-config.php` določite `RUDEL_GIT_AUTHOR_NAME` in `RUDEL_GIT_AUTHOR_EMAIL`, če želite uporabiti druge vrednosti.
