# GitLab에서 GitHub 리포지토리 마이그레이션

평가판 실행을 수행한 다음, 리포지토리를 GitLab에서 .로 GitHub마이그레이션합니다.

## 사전 요구 사항

* 이 가이드의 이전 단계를 모두 완료해야 합니다.
* 내보내기에서 GitLab 프로젝트를 사용하도록 설정해야 합니다. GitLab 설명서에서 가져오기에 대한 [프로젝트 내보내](https://docs.gitlab.com/administration/settings/import_and_export_settings/#enable-project-export)[기 및 Sidekiq 구성](https://docs.gitlab.com/administration/sidekiq/configuration_for_imports/) 사용을 참조하세요.
* 마이그레이션될 데이터와 가져오기 도구의 알려진 지원 제한 사항을 이해했는지 확인하세요. 자세한 내용은 [GitLab에서 GitHub 마이그레이션 이해](/ko/migrations/using-github-enterprise-importer/migrate-from-gitlab/understand-migrations)을 참조하세요.
* 필수는 아니지만 프로덕션 마이그레이션 중에는 작업을 중지하는 것이 좋습니다. Importer은(는) 델타 마이그레이션을 지원하지 않으므로 마이그레이션 중에 발생하는 변경 내용은 마이그레이션되지 않습니다. 프로덕션 마이그레이션 중에 작업을 중단하지 않도록 선택하는 경우, 이러한 변경 내용을 수동으로 마이그레이션해야 합니다.

## 평가판 실행 수행

엔터프라이즈에 고유할 수 있는 문제를 발견할 수 있도록 마이그레이션의 평가판을 수행하는 것이 좋습니다. 평가판 실행을 통해 다음을 알아봅니다.

* 지정된 리포지토리에 대한 마이그레이션을 성공적으로 완료할 수 있는지 여부입니다.
* 마이그레이션된 리포지토리를 다시 실행 가능한 상태로 되돌릴 수 있는지 여부입니다.
* 마이그레이션을 실행하는 데 걸리는 시간.

평가판 실행은 언제든지 발생할 수 있으며 마이그레이션 중에 작업을 중단할 필요가 없습니다. 평가판 마이그레이션을 완료하는 데 걸리는 시간을 줄이기 위해 평가판 실행을 연속적으로 예약할 수 있습니다. 그런 다음, 해당 리포지토리의 사용자는 자신의 시간에 맞는 결과의 유효성을 검사할 수 있습니다.

1. 평가판 마이그레이션을 위한 테스트 조직을 만듭니다.

   모든 평가판 실행에 단일 조직을 사용하거나, 의도한 각 대상 조직에 대해 하나의 테스트 조직을 만들 수 있습니다. 조직이 프로덕션이 아닌 마이그레이션 유효성 검사를 위한 것임을 명확히 하려면 조직 이름의 끝에 `-sandbox`을(를) 포함시키는 것이 좋습니다. 완료한 후, 테스트 조직을 삭제할 수 있습니다.

2. 평가판 마이그레이션을 실행합니다.

3. [후속 작업](/ko/migrations/using-github-enterprise-importer/migrate-from-gitlab/follow-up-tasks)에서 후속 작업을 완료할 수 있는지 확인합니다.

4. 사용자에게 마이그레이션 결과가 유효한지 검사하도록 요청합니다.

5. 평가판 마이그레이션에서 발견한 문제를 해결합니다.

6. 필요에 따라 테스트 조직을 삭제합니다.

## 단일 리포지토리 마이그레이션

하나의 리포지토리를 마이그레이션하려면 명령을 사용합니다 `gh gl2gh migrate-repo` .

```shell copy
gh gl2gh migrate-repo \
  --gitlab-server-url GITLAB_SERVER_URL \
  --gitlab-group SOURCE_GROUP \
  --gitlab-project SOURCE_PROJECT \
  --github-org DESTINATION \
  --github-repo NEW_REPO_NAME \
  --use-github-storage
```

명령 내의 자리 표시자를 다음 값으로 바꿉니다.

| Placeholder         | Value                                                                                       |
| ------------------- | ------------------------------------------------------------------------------------------- |
| GITLAB\_SERVER\_URL | GitLab 인스턴스의 전체 URL(예: `https://gitlab.com` 또는 `https://gitlab.example.com`.                |
| SOURCE\_GROUP       | 프로젝트를 포함하는 그룹 또는 네임스페이스의 전체 경로입니다. 중첩된 하위 그룹의 경우 전체 경로(예: `parent-group/subgroup`.)를 사용합니다. |
| SOURCE\_PROJECT     | 마이그레이션할 GitLab 프로젝트입니다.                                                                     |
| 대상                  | 대상 조직입니다 GitHub.                                                                            |
| NEW\_REPO\_NAME     | 에 있는 리포지 GitHub토리의 이름입니다.                                                                   |

사용하지 GitHub-owned blob storage않는 경우 [Blob Storage 구성](/ko/migrations/using-github-enterprise-importer/migrate-from-gitlab/configure-storage)을 참조하세요.

### 추가 인수

| Argument                                  | Description                                                                                                                                                                                                                                |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--target-repo-visibility`                | 새 리포지토리의 표시 유형을 < <c1 />a0/> 또는 <c2 />.로 <c0 />설정합니다. 기본값은 `private`입니다.                                                                                                                                                                   |
| `--target-api-url TARGET-API-URL`         | GHE.com로 마이그레이션하는 경우 `--target-api-url TARGET-API-URL`을(를) 추가합니다. 여기서 TARGET-API-URL은 엔터프라이즈 하위 도메인의 기본 API URL입니다. 예: `https://api.octocorp.ghe.com`                                                                                      |
| `--target-uploads-url TARGET-UPLOADS-URL` | 마이그레이션하고 GHE.com 사용하는 GitHub-owned blob storage경우 TARGET-UPLOADS-URL 엔터프라이즈 하위 도메인에 대한 API URL을 기본 업로드하는 위치인 추가 `--target-uploads-url TARGET-UPLOADS-URL`합니다. 예: `https://uploads.octocorp.ghe.com`. 기본값은 `https://uploads.github.com`입니다. |
| `--no-ssl-verify`                         | GitLab 인스턴스와 GL2GH extension 대화할 때 SSL 확인을 사용하지 않도록 설정합니다. GitLab 인스턴스에서 자체 서명된 인증서를 사용하는 경우에만 사용합니다. 다른 모든 단계는 여전히 SSL을 확인합니다.                                                                                                            |
| `--archive-url URL`                       | GitLab에서 프로젝트를 다시 내보내는 대신 URL에서 이전에 내보낸 보관 파일을 가져옵니다.                                                                                                                                                                                      |
| `--archive-path PATH`                     | GitLab에서 프로젝트를 다시 내보내는 대신 로컬 파일 경로에서 이전에 내보낸 보관 파일을 가져옵니다.                                                                                                                                                                                 |
| `--keep-archive`                          | 성공적으로 업로드한 후 내보내기 보관 파일을 삭제하는 대신 로컬로 유지합니다.                                                                                                                                                                                                |

## 마이그레이션 스크립트 생성

여러 리포지 GitHub Enterprise Cloud 토리를 한 번에 GitHub CLI 마이그레이션하려면 마이그레이션 스크립트를 생성합니다. 결과 스크립트에는 리포지토리당 하나의 `migrate-repo` 명령이 포함됩니다.

마이그레이션 스크립트를 생성하려면 `gh gl2gh generate-script` 명령을 실행합니다.

```shell copy
gh gl2gh generate-script \
  --gitlab-server-url GITLAB_SERVER_URL \
  --github-org DESTINATION \
  --output FILENAME \
  --use-github-storage
```

명령 내의 자리 표시자를 다음 값으로 바꿉니다.

| Placeholder         | Value                                                                                                                                                                                                                                                                                                                                                                        |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| GITLAB\_SERVER\_URL | GitLab 인스턴스의 전체 URL(예: `https://gitlab.com` 또는 `https://gitlab.example.com`.                                                                                                                                                                                                                                                                                                 |
| 대상                  | 대상 조직입니다 GitHub.                                                                                                                                                                                                                                                                                                                                                             |
| FILENAME            | 결과 마이그레이션 스크립트의 파일 이름<br><br>터미널을 사용하는 경우 생성된 스크립트에서 PowerShell을 실행해야 하므로 `.ps1` 파일 확장을 사용합니다. [Mac](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.2) 또는 [Linux](https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-linux?view=powershell-7.2)용 PowerShell을 설치할 수 있습니다. |

기본적으로 스크립트에는 토큰이 액세스할 수 있는 모든 프로젝트가 포함됩니다. 스크립트의 범위를 지정하려면 단일 프로젝트를 추가하거나 `--gitlab-group GROUP --gitlab-project PROJECT` 추가`--gitlab-group GROUP`합니다.

사용하지 GitHub-owned blob storage않는 경우 [Blob Storage 구성](/ko/migrations/using-github-enterprise-importer/migrate-from-gitlab/configure-storage)을 참조하세요.

### 추가 인수

| Argument                                  | Description                                                                                                                                                                                                                                |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `--target-api-url TARGET-API-URL`         | GHE.com로 마이그레이션하는 경우 `--target-api-url TARGET-API-URL`을(를) 추가합니다. 여기서 TARGET-API-URL은 엔터프라이즈 하위 도메인의 기본 API URL입니다. 예: `https://api.octocorp.ghe.com`                                                                                      |
| `--target-uploads-url TARGET-UPLOADS-URL` | 마이그레이션하고 GHE.com 사용하는 GitHub-owned blob storage경우 TARGET-UPLOADS-URL 엔터프라이즈 하위 도메인에 대한 API URL을 기본 업로드하는 위치인 추가 `--target-uploads-url TARGET-UPLOADS-URL`합니다. 예: `https://uploads.octocorp.ghe.com`. 기본값은 `https://uploads.github.com`입니다. |

### 마이그레이션 스크립트 검토

스크립트를 생성한 후 파일을 검토하고 필요에 따라 스크립트를 편집합니다.

* 마이그레이션하지 않으려는 리포지토리가 있는 경우, 해당 줄을 삭제하거나 주석 처리합니다.
* 리포지토리가 대상 조직에 다른 이름을 갖도록 하려면 해당 `--github-repo` 플래그 값을 업데이트합니다.
* 새 리포지토리의 표시 유형을 변경하려면 해당 `--target-repo-visibility` 플래그를 추가하거나 업데이트합니다.

### 리포지토리 마이그레이션

평가판 실행이 성공했고 후속 작업을 완료할 수 있는 경우 실제 마이그레이션을 진행할 수 있습니다.

> \[!WARNING] 마이그레이션하는 리포지토리에서 작업을 중지하는 것이 좋습니다. 마이그레이션 도중 또는 이후에 변경된 내용은 수동으로 마이그레이션해야 합니다.

생성한 스크립트를 실행합니다. 아래 명령의 FILENAME을 스크립트를 생성할 때 제공받은 파일 이름으로 바꿉니다.

* 터미널을 사용하는 경우, `./`을(를) 사용하세요.

  ```shell copy
  ./FILENAME
  ```

* PowerShell을 사용하는 경우 `.\`을(를) 사용하세요.

  ```shell copy
  .\FILENAME
  ```