
# Git

Rudel виконує операції PHP на основі Git через Pitmaster. Для цього не потрібен двійковий файл `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`. У поточному випуску пісочниця її не обслуговує ([проблема #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` враховує лише ці пов'язані робочі дерева. Див. [Очищення](https://rudel.inline0.dev/uk/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`.
