
# Git

Rudel izmanto PHP vietējās Git darbības ar Pitmaster starpniecību. Tam nav vajadzīgs resursdatora `git` izpildfails. Attālie repozitoriji tiek sasniegti, izmantojot HTTP(S) vai SSH.

Katrai smilškastei ir viens zara nosaukums — `rudel/{sandbox-id}`, ko izmanto visās tālāk aprakstītajās Git darbplūsmās.

## Attālā repozitorija klonēšana jaunā smilškastē

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

Rudel izveido smilškasti, klonē attālo repozitoriju uz `themes/my-theme` smilškastes direktorijā (direktorija nosaukums ir repozitorija nosaukums), izveido zaru `rudel/{id}` no noklusējuma zara un pārslēdzas uz to. Izmantojot `--type=plugin`, izraksts tiek ievietots `plugins/my-theme`. Attālais repozitorijs, direktorija un bāzes zars tiek saglabāti smilškastē vēlākai nosūtīšanai. Ja klonēšana neizdodas, smilškaste tiek paturēta, un komanda parāda brīdinājumu.

Izraksts ir darba kopija priekš `wp rudel push`. Pašreizējā laidienā smilškaste to nenodrošina ([11. problēma](https://github.com/inline0/rudel/issues/11)):

- Smilškaste piedāvā tēmu, kas izvēlēta ar `--theme`, vai resursdatora aktīvo tēmu, kas tiek nokopēta no resursdatora, kad tiek izveidota smilškaste. `--theme` jānorāda tēma, kas instalēta resursdatorā, tāpēc tiek piedāvāta tikai tā izrakstītā koda versija, kuras repozitorija nosaukums atbilst šim slug, un klons pēc tam raksta nokopētajā tēmas direktorijā.
- Spraudņi vienmēr tiek ielādēti no resursdatora spraudņu direktorija, tāpēc `--type=plugin` izrakstītā koda versija netiek palaista.

## Saistītie darba koki

Kad klonējat smilškasti, kuras tēmas direktorijs ir Git repozitorijs, Rudel izveido saistītu darba koku jaunajai smilškastei, nevis kopē failus:

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

Darba koks atrodas zarā `rudel/{new-id}`. Rudel to reģistrē jaunās smilškastes metadatos ar skaidri norādītu darba koka nosaukumu, kas veidots no smilškastes ID, satura tipa un tēmas slug, lai divas smilškastes, kurās tiek izmantots viens un tas pats tēmas slug, nesadurtos. Iznīcinot smilškasti, darba koks tiek noņemts un zars dzēsts.

`wp rudel cleanup --merged` ņem vērā tikai šos saistītos darba kokus. Skatiet [Tīrīšana](https://rudel.inline0.dev/lv/docs/features/cleanup).

## Izmaiņu iesūtīšana

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

`push` apstiprina visas izmaiņas izrakstītajā koda versijā un iesūta zaru `rudel/{id}` uz `origin`. Ja nekas nav mainījies, tā atgriež `No changes to push.`.

- `--git=<remote>` iestata attālo repozitoriju, ja tas nav saglabāts; pēc pirmās veiksmīgās iesūtīšanas tas tiek atcerēts.
- `--dir=<dir>` atlasa direktoriju attiecībā pret smilškastes direktoriju, piemēram, `themes/my-theme`. Pēc noklusējuma tā ir direktorija, ko saglabājis `--git`, vai arī visa smilškastes direktorija.
- `--message` pēc noklusējuma ir `Update from Rudel sandbox`.

No PHP `Rudel::push( $id, $remote_url, $message, $subdir )` dara to pašu un izsauc `rudel_*_environment_push` āķus.

## Apstiprinājuma identitāte

Ja izrakstītajā koda versijā tās Git konfigurācijā nav `user.name` vai `user.email`, Rudel ieraksta `Rudel` un `rudel@localhost`. Lai izmantotu citas vērtības, definējiet `RUDEL_GIT_AUTHOR_NAME` un `RUDEL_GIT_AUTHOR_EMAIL` failā `wp-config.php`.
