
# Git

Rudel używa operacji PHP-native Git za pośrednictwem Pitmaster. Nie wymaga binarnego pliku hosta `git`. Dostęp do zdalnych repozytoriów odbywa się przez HTTP(S) lub SSH.

Każda piaskownica ma jedną nazwę gałęzi, `rudel/{sandbox-id}`, używaną we wszystkich opisanych niżej przepływach pracy Git.

## Sklonuj zdalne repozytorium do nowej piaskownicy

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

Rudel tworzy piaskownicę, klonuje zdalne repozytorium do `themes/my-theme` wewnątrz katalogu piaskownicy (nazwa katalogu jest nazwą repozytorium), tworzy gałąź `rudel/{id}` na podstawie domyślnej gałęzi i ją przełącza. Z opcją `--type=plugin` kopia robocza trafia zamiast tego do `plugins/my-theme`. Zdalne repozytorium, katalog i gałąź bazowa są zapisywane w piaskownicy, aby można było później wypychać zmiany. Jeśli klonowanie się nie powiedzie, piaskownica zostaje, a polecenie wyświetla ostrzeżenie.

Kopia robocza służy do pracy nad `wp rudel push`. W bieżącym wydaniu piaskownica jej nie udostępnia ([zgłoszenie nr 11](https://github.com/inline0/rudel/issues/11)):

- Piaskownica udostępnia motyw wybrany za pomocą `--theme` albo aktywny motyw hosta, skopiowany z hosta podczas tworzenia piaskownicy. `--theme` musi wskazywać motyw zainstalowany na hoście, więc kopia robocza jest udostępniana tylko wtedy, gdy nazwa repozytorium pasuje do tego sluga, a klonowanie zapisuje pliki w skopiowanym katalogu motywu.
- Wtyczki są zawsze ładowane z katalogu wtyczek hosta, więc kopia robocza `--type=plugin` nigdy nie jest uruchamiana.

## Powiązane drzewa robocze

Gdy klonujesz piaskownicę, której katalog motywu jest repozytorium Git, Rudel tworzy dla nowej piaskownicy powiązane drzewo robocze zamiast kopiować pliki:

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

Drzewo robocze używa gałęzi `rudel/{new-id}`. Rudel zapisuje je w metadanych nowej piaskownicy pod jawną nazwą drzewa roboczego, opartą na identyfikatorze piaskownicy, typie treści i slugu motywu, dzięki czemu piaskownice używające tego samego slugu motywu nie kolidują ze sobą. Zniszczenie piaskownicy usuwa drzewo robocze i jego gałąź.

`wp rudel cleanup --merged` uwzględnia tylko te powiązane drzewa robocze. Zobacz [Czyszczenie](https://rudel.inline0.dev/pl/docs/features/cleanup).

## Wypychaj zmiany

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

`push` zatwierdza każdą zmianę w kopii roboczej i wypycha gałąź `rudel/{id}` do `origin`. Zwraca `No changes to push.`, jeśli nic się nie zmieniło.

- `--git=<remote>` ustawia zdalne repozytorium, jeśli nie zostało zapisane; po pierwszym udanym wypchnięciu jest ono zapamiętywane.
- `--dir=<dir>` wybiera katalog względem katalogu piaskownicy, na przykład `themes/my-theme`. Domyślnie używa katalogu zapisanego przez `--git`, a w przeciwnym razie całego katalogu piaskownicy.
- Domyślną wartością `--message` jest `Update from Rudel sandbox`.

Z poziomu PHP `Rudel::push( $id, $remote_url, $message, $subdir )` wykonuje to samo i uruchamia haki `rudel_*_environment_push`.

## Tożsamość autora zatwierdzeń

Jeśli kopia robocza nie ma `user.name` ani `user.email` w konfiguracji Git, Rudel zapisuje `Rudel` i `rudel@localhost`. Ustaw `RUDEL_GIT_AUTHOR_NAME` i `RUDEL_GIT_AUTHOR_EMAIL` w `wp-config.php`, aby użyć innych wartości.
