
# Git

Rudel използва операции PHP чрез Pitmaster за Git. Не изисква двоичния файл `git` на основната инсталация. Отдалечените хранилища се достъпват през HTTP(S) или SSH.

Всеки пясъчник има едно име на клон, `rudel/{sandbox-id}`, използвано във всички описани по-долу работни процеси на Git.

## Клониране на отдалечено хранилище в нов пясъчник

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

Rudel създава пясъчника, клонира отдалеченото хранилище в `themes/my-theme` в директорията на пясъчника (името на директорията е името на хранилището), създава клона `rudel/{id}` от клона по подразбиране и го извлича. С `--type=plugin` клонирането се записва в `plugins/my-theme`. Отдалеченото хранилище, директорията и базовият клон се съхраняват в пясъчника за бъдещо изпращане. Ако клонирането е неуспешно, пясъчникът се запазва и командата извежда предупреждение.

Клонирането е работно копие за `wp rudel push`. В текущата версия пясъчникът не го обслужва ([issue #11](https://github.com/inline0/rudel/issues/11)):

- Пясъчникът обслужва темата, избрана с `--theme`, или активната тема на основната инсталация, копирана от нея при създаването на пясъчника. `--theme` трябва да указва тема, инсталирана в основната инсталация, така че клониране се обслужва само когато името на хранилището съвпада с този идентификатор и клонирането записва в копираната директория на темата.
- Разширенията винаги се зареждат от директорията за разширения на основната инсталация, затова клонирането `--type=plugin` никога не се изпълнява.

## Свързани работни дървета

Когато клонирате пясъчник, чиято директория на темата е хранилище Git, Rudel създава свързано работно дърво за новия пясъчник вместо да копира файлове:

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

Работното дърво е в клона `rudel/{new-id}`. Rudel го записва в метаданните на новия пясъчник под изрично име на работно дърво, базирано на ID на пясъчника, типа съдържание и идентификатора на темата, така че два пясъчника с един и същ идентификатор на тема да не се сблъскват. Унищожаването на пясъчника премахва работното дърво и изтрива клона му.

`wp rudel cleanup --merged` взема предвид само тези свързани работни дървета. Вижте [Cleanup](https://rudel.inline0.dev/bg/docs/features/cleanup).

## Изпращане на промените

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

`push` предава всяка промяна в клонирането и изпраща клона `rudel/{id}` към `origin`. Връща `No changes to push.`, ако няма промени.

- `--git=<remote>` задава отдалеченото хранилище, ако не е запазено; след първото успешно изпращане то се запомня.
- `--dir=<dir>` избира директорията спрямо директорията на пясъчника, например `themes/my-theme`. По подразбиране се използва директорията, запазена от `--git`, или цялата директория на пясъчника.
- `--message` по подразбиране е `Update from Rudel sandbox`.

От PHP, `Rudel::push( $id, $remote_url, $message, $subdir )` прави същото и задейства куките `rudel_*_environment_push`.

## Идентичност при предаване на промени

Ако в конфигурацията на клонирането Git липсва `user.name` или `user.email`, Rudel записва `Rudel` и `rudel@localhost`. Задайте `RUDEL_GIT_AUTHOR_NAME` и `RUDEL_GIT_AUTHOR_EMAIL` в `wp-config.php`, за да използвате други стойности.
