
# Git

Rudel은 Pitmaster을 통해 PHP 기반 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`의 작업 사본입니다. 현재 릴리스에서는 샌드박스가 이를 제공하지 않습니다([이슈 #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/ko/docs/features/cleanup)를 참고하세요.

## 변경 사항 푸시

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

`push`은 체크아웃의 모든 변경 사항을 커밋하고 `origin`에 `rudel/{id}` 브랜치를 푸시합니다. 변경 사항이 없으면 `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`를 기록합니다. 다른 값을 사용하려면 `wp-config.php`에서 `RUDEL_GIT_AUTHOR_NAME` 및 `RUDEL_GIT_AUTHOR_EMAIL`을 정의하세요.
