InfoGrab DocsInfoGrab Docs

Bitbucket Cloud에서 마이그레이션

요약

Bitbucket Cloud에서 GitLab으로 프로젝트를 가져옵니다. Bitbucket Cloud 가져오기 도구는 Bitbucket Cloud 항목의 일부를 가져옵니다. Bitbucket Cloud 항목을 가져올 때 동작은 다음과 같습니다:

히스토리
  • 일부 가져온 항목에 붙는 Imported 배지가 GitLab 17.2에서 도입되었습니다.

Bitbucket Cloud에서 GitLab으로 프로젝트를 가져옵니다.

Bitbucket Cloud 가져오기 도구는 Bitbucket Cloud 항목의 일부를 가져옵니다.

Bitbucket Cloud 항목 가져옴
리포지터리 설명 ✅
Git 리포지터리 데이터 ✅
이슈 (댓글 포함) ✅
풀 리퀘스트 (댓글 포함) ✅
마일스톤 ✅
위키 ✅
레이블 ✅
마일스톤 ✅
LFS 오브젝트 ✅
Markdown의 인라인 이미지 및 첨부 파일 ❌
풀 리퀘스트 승인 ❌
승인 규칙 ❌

알려진 문제#

  • 이슈, 이슈 댓글, 풀 리퀘스트에 삽입된 이미지와 첨부 파일은 GitLab으로 복사되지 않습니다. 이러한 항목은 Bitbucket이 호스팅하는 원본 URL(예: bitbucket.org 또는 bbuseruploads.s3.amazonaws.com)을 가리키는 외부 링크로 남습니다. 소스 Bitbucket 리포지터리를 삭제하면 삽입된 이미지와 첨부 파일 링크가 영구적으로 끊어집니다. 소스 Bitbucket 리포지터리를 삭제하기 전에 삽입된 이미지와 첨부 파일에 접근할 수 있는지 확인하거나 별도로 보관합니다. 이미지와 첨부 파일 가져오기 지원은 작업 항목 623235에 제안돼 있습니다.

가져오기 도구 워크플로#

Bitbucket Cloud 항목을 가져올 때 동작은 다음과 같습니다:

  • 풀 리퀘스트와 이슈에 대한 참조가 유지됩니다.
  • 리포지터리의 공개 여부가 유지됩니다. Bitbucket Cloud에서 비공개인 리포지터리는 GitLab에서도 비공개로 만들어집니다.
  • 가져온 이슈, 머지 리퀘스트, 댓글에는 GitLab에서 Imported 배지가 붙습니다.

이슈, 풀 리퀘스트, 댓글을 가져올 때 Bitbucket Cloud 가져오기 도구는 다음과 같이 동작합니다:

  • 작성자/담당자의 Bitbucket 닉네임을 사용해 GitLab에서 동일한 Bitbucket ID를 찾습니다.
  • 일치하지 않거나 GitLab 데이터베이스에서 해당 사용자를 찾지 못하면, 프로젝트 생성자(보통 가져오기를 시작한 현재 사용자)를 작성자로 설정하고 원래 Bitbucket 작성자에 대한 참조를 이슈에 남깁니다.

풀 리퀘스트에 대해 가져오기 도구는 다음과 같이 동작합니다:

  • 소스 SHA를 사용하고, 그 SHA가 리포지터리에 없으면 소스 커밋을 머지 커밋 SHA로 설정하려고 시도합니다.
  • 머지 리퀘스트의 담당자를 작성자로 설정하고, GitLab에서 Bitbucket ID와 사용자 이름이 일치하는 사용자를 리뷰어로 설정합니다.
  • GitLab의 머지 리퀘스트를 opened, closed, merged 중 하나로 설정합니다.

이슈에 대해 가져오기 도구는 다음과 같이 동작합니다:

  • Bitbucket의 이슈 유형에 해당하는 레이블을 추가합니다. bug, enhancement, proposal, task 중 하나입니다.
  • Bitbucket의 이슈가 resolved, invalid, duplicate, wontfix, closed 중 하나였다면 GitLab에서 해당 이슈를 닫습니다.

Bitbucket Cloud 가져오기 도구는 네임스페이스(그룹)가 없으면 새로 만듭니다. 해당 네임스페이스가 이미 사용 중이면 리포지터리는 가져오기를 시작한 사용자의 네임스페이스 아래로 들어갑니다.

사전 요구 사항#

  • Bitbucket Cloud 통합을 활성화하거나 GitLab 관리자에게 활성화를 요청해야 합니다. GitLab.com에서는 기본적으로 활성화돼 있습니다.
  • Bitbucket Cloud 가져오기 소스를 활성화하거나 GitLab 관리자에게 활성화를 요청해야 합니다. GitLab.com에서는 기본적으로 활성화돼 있습니다.
  • 가져올 대상 그룹에 대해 Maintainer 또는 Owner 권한이 있어야 합니다.
  • Bitbucket의 풀 리퀘스트는 소스 프로젝트와 대상 프로젝트가 같아야 하며, 프로젝트의 포크에서 온 것이 아니어야 합니다. 그렇지 않으면 풀 리퀘스트가 빈 머지 리퀘스트로 가져와집니다.

사용자 기여가 매핑되게 하려면 각 사용자가 프로젝트 가져오기 전에 다음을 완료해야 합니다:

  1. Bitbucket 계정 설정의 사용자 이름이 Atlassian 계정 설정의 공개 이름과 일치하는지 확인합니다. 일치하지 않으면 Atlassian 계정 설정의 공개 이름을 Bitbucket 계정 설정의 사용자 이름과 같게 수정합니다.
  2. GitLab 프로필 서비스 로그인에서 Bitbucket 계정을 연결합니다.

Bitbucket Cloud API 토큰 생성#

가져오기 API로 Bitbucket Cloud 리포지터리를 가져오려면 Bitbucket Cloud API 토큰을 만들어야 합니다.

Bitbucket Cloud API 토큰을 생성하려면 다음과 같이 진행합니다:

  1. https://id.atlassian.com/manage-profile/security/api-tokens로 이동합니다.

  2. Create API token with scopes를 선택합니다.

  3. 토큰 이름과 만료 날짜를 입력한 다음 Next를 선택합니다.

  4. Bitbucket을 선택한 다음 Next를 선택합니다.

  5. 최소한 다음 스코프를 선택합니다:

    • read:repository:bitbucket
    • read:pullrequest:bitbucket
    • read:issue:bitbucket
    • read:wiki:bitbucket
  6. Create token을 선택하고 토큰을 복사합니다.

Bitbucket Cloud 리포지터리 가져오기#

  1. 오른쪽 위에서 Create new (+)와 New project/repository를 선택합니다.
  2. Import project를 선택합니다.
  3. Bitbucket Cloud를 선택합니다.
  4. Bitbucket에 로그인한 다음 Grant access를 선택해 GitLab에 Bitbucket 계정 액세스를 허용합니다.
  5. 가져올 프로젝트를 선택하거나 모든 프로젝트를 가져옵니다. 이름으로 프로젝트를 필터링할 수 있고 프로젝트마다 가져올 네임스페이스를 선택할 수 있습니다.
  6. 프로젝트를 가져오려면 다음과 같이 진행합니다:
    • 처음이라면 Import를 선택합니다.
    • 이후에는 Re-import를 선택합니다. 새 이름을 지정하고 Re-import를 다시 선택합니다. 다시 가져오면 소스 프로젝트의 새 사본이 만들어집니다.

문제 해결#

다음 절에서는 Bitbucket Cloud에서 가져올 때 발생할 수 있는 문제의 해결 방법을 설명합니다.

가져오기 프로세스에서 잘못된 계정 사용#

올바른 계정으로 로그인했는지 확인합니다. 실수로 잘못된 계정으로 가져오기를 시작했다면 다음 단계를 따릅니다:

  1. Bitbucket 계정에 대한 GitLab 액세스를 취소합니다. Bitbucket Cloud 리포지터리를 가져올 때의 과정을 되돌리는 작업입니다.
  2. Bitbucket 계정에서 로그아웃한 다음 Bitbucket Cloud 리포지터리 가져오기를 다시 수행합니다.

이름이 일치함에도 사용자 매핑 실패#

사용자 매핑이 동작하려면 Bitbucket 계정 설정의 사용자 이름이 Atlassian 계정 설정의 공개 이름과 일치해야 합니다.

두 이름이 일치하는데도 사용자 매핑이 실패한다면, 해당 사용자가 GitLab 프로필 서비스 로그인에서 Bitbucket 계정을 연결한 뒤에 Bitbucket 사용자 이름을 바꿨을 수 있습니다.

이 문제를 해결하려면 사용자가 GitLab 데이터베이스의 Bitbucket 외부 UID가 현재 Bitbucket 공개 이름과 일치하는지 확인하고, 일치하지 않으면 다시 연결해야 합니다:

  1. API로 인증된 사용자를 조회합니다.
  2. API 응답의 identities 속성에는 GitLab 데이터베이스에 존재하는 Bitbucket 계정이 들어 있습니다. extern_uid가 현재 Bitbucket 공개 이름과 일치하지 않으면 사용자는 GitLab 프로필 서비스 로그인에서 Bitbucket 계정을 다시 연결해야 합니다.
  3. 다시 연결한 뒤에는 API를 한 번 더 사용해 GitLab 데이터베이스의 extern_uid가 현재 Bitbucket 공개 이름과 일치하는지 확인해야 합니다.

그다음 프로젝트를 가져온 사용자가 가져온 프로젝트를 삭제하고 다시 가져와야 합니다.

관련 주제#

Bitbucket Cloud에서 마이그레이션

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

Bitbucket Cloud에서 GitLab으로 프로젝트를 가져옵니다. Bitbucket Cloud 가져오기 도구는 Bitbucket Cloud 항목의 일부를 가져옵니다. Bitbucket Cloud 항목을 가져올 때 동작은 다음과 같습니다:

히스토리
  • 일부 가져온 항목에 붙는 Imported 배지가 GitLab 17.2에서 도입되었습니다.

Bitbucket Cloud에서 GitLab으로 프로젝트를 가져옵니다.

Bitbucket Cloud 가져오기 도구는 Bitbucket Cloud 항목의 일부를 가져옵니다.

Bitbucket Cloud 항목 가져옴
리포지터리 설명 ✅
Git 리포지터리 데이터 ✅
이슈 (댓글 포함) ✅
풀 리퀘스트 (댓글 포함) ✅
마일스톤 ✅
위키 ✅
레이블 ✅
마일스톤 ✅
LFS 오브젝트 ✅
Markdown의 인라인 이미지 및 첨부 파일 ❌
풀 리퀘스트 승인 ❌
승인 규칙 ❌

알려진 문제#

  • 이슈, 이슈 댓글, 풀 리퀘스트에 삽입된 이미지와 첨부 파일은 GitLab으로 복사되지 않습니다. 이러한 항목은 Bitbucket이 호스팅하는 원본 URL(예: bitbucket.org 또는 bbuseruploads.s3.amazonaws.com)을 가리키는 외부 링크로 남습니다. 소스 Bitbucket 리포지터리를 삭제하면 삽입된 이미지와 첨부 파일 링크가 영구적으로 끊어집니다. 소스 Bitbucket 리포지터리를 삭제하기 전에 삽입된 이미지와 첨부 파일에 접근할 수 있는지 확인하거나 별도로 보관합니다. 이미지와 첨부 파일 가져오기 지원은 작업 항목 623235에 제안돼 있습니다.

가져오기 도구 워크플로#

Bitbucket Cloud 항목을 가져올 때 동작은 다음과 같습니다:

  • 풀 리퀘스트와 이슈에 대한 참조가 유지됩니다.
  • 리포지터리의 공개 여부가 유지됩니다. Bitbucket Cloud에서 비공개인 리포지터리는 GitLab에서도 비공개로 만들어집니다.
  • 가져온 이슈, 머지 리퀘스트, 댓글에는 GitLab에서 Imported 배지가 붙습니다.

이슈, 풀 리퀘스트, 댓글을 가져올 때 Bitbucket Cloud 가져오기 도구는 다음과 같이 동작합니다:

  • 작성자/담당자의 Bitbucket 닉네임을 사용해 GitLab에서 동일한 Bitbucket ID를 찾습니다.
  • 일치하지 않거나 GitLab 데이터베이스에서 해당 사용자를 찾지 못하면, 프로젝트 생성자(보통 가져오기를 시작한 현재 사용자)를 작성자로 설정하고 원래 Bitbucket 작성자에 대한 참조를 이슈에 남깁니다.

풀 리퀘스트에 대해 가져오기 도구는 다음과 같이 동작합니다:

  • 소스 SHA를 사용하고, 그 SHA가 리포지터리에 없으면 소스 커밋을 머지 커밋 SHA로 설정하려고 시도합니다.
  • 머지 리퀘스트의 담당자를 작성자로 설정하고, GitLab에서 Bitbucket ID와 사용자 이름이 일치하는 사용자를 리뷰어로 설정합니다.
  • GitLab의 머지 리퀘스트를 opened, closed, merged 중 하나로 설정합니다.

이슈에 대해 가져오기 도구는 다음과 같이 동작합니다:

  • Bitbucket의 이슈 유형에 해당하는 레이블을 추가합니다. bug, enhancement, proposal, task 중 하나입니다.
  • Bitbucket의 이슈가 resolved, invalid, duplicate, wontfix, closed 중 하나였다면 GitLab에서 해당 이슈를 닫습니다.

Bitbucket Cloud 가져오기 도구는 네임스페이스(그룹)가 없으면 새로 만듭니다. 해당 네임스페이스가 이미 사용 중이면 리포지터리는 가져오기를 시작한 사용자의 네임스페이스 아래로 들어갑니다.

사전 요구 사항#

  • Bitbucket Cloud 통합을 활성화하거나 GitLab 관리자에게 활성화를 요청해야 합니다. GitLab.com에서는 기본적으로 활성화돼 있습니다.
  • Bitbucket Cloud 가져오기 소스를 활성화하거나 GitLab 관리자에게 활성화를 요청해야 합니다. GitLab.com에서는 기본적으로 활성화돼 있습니다.
  • 가져올 대상 그룹에 대해 Maintainer 또는 Owner 권한이 있어야 합니다.
  • Bitbucket의 풀 리퀘스트는 소스 프로젝트와 대상 프로젝트가 같아야 하며, 프로젝트의 포크에서 온 것이 아니어야 합니다. 그렇지 않으면 풀 리퀘스트가 빈 머지 리퀘스트로 가져와집니다.

사용자 기여가 매핑되게 하려면 각 사용자가 프로젝트 가져오기 전에 다음을 완료해야 합니다:

  1. Bitbucket 계정 설정의 사용자 이름이 Atlassian 계정 설정의 공개 이름과 일치하는지 확인합니다. 일치하지 않으면 Atlassian 계정 설정의 공개 이름을 Bitbucket 계정 설정의 사용자 이름과 같게 수정합니다.
  2. GitLab 프로필 서비스 로그인에서 Bitbucket 계정을 연결합니다.

Bitbucket Cloud API 토큰 생성#

가져오기 API로 Bitbucket Cloud 리포지터리를 가져오려면 Bitbucket Cloud API 토큰을 만들어야 합니다.

Bitbucket Cloud API 토큰을 생성하려면 다음과 같이 진행합니다:

  1. https://id.atlassian.com/manage-profile/security/api-tokens로 이동합니다.

  2. Create API token with scopes를 선택합니다.

  3. 토큰 이름과 만료 날짜를 입력한 다음 Next를 선택합니다.

  4. Bitbucket을 선택한 다음 Next를 선택합니다.

  5. 최소한 다음 스코프를 선택합니다:

    • read:repository:bitbucket
    • read:pullrequest:bitbucket
    • read:issue:bitbucket
    • read:wiki:bitbucket
  6. Create token을 선택하고 토큰을 복사합니다.

Bitbucket Cloud 리포지터리 가져오기#

  1. 오른쪽 위에서 Create new (+)와 New project/repository를 선택합니다.
  2. Import project를 선택합니다.
  3. Bitbucket Cloud를 선택합니다.
  4. Bitbucket에 로그인한 다음 Grant access를 선택해 GitLab에 Bitbucket 계정 액세스를 허용합니다.
  5. 가져올 프로젝트를 선택하거나 모든 프로젝트를 가져옵니다. 이름으로 프로젝트를 필터링할 수 있고 프로젝트마다 가져올 네임스페이스를 선택할 수 있습니다.
  6. 프로젝트를 가져오려면 다음과 같이 진행합니다:
    • 처음이라면 Import를 선택합니다.
    • 이후에는 Re-import를 선택합니다. 새 이름을 지정하고 Re-import를 다시 선택합니다. 다시 가져오면 소스 프로젝트의 새 사본이 만들어집니다.

문제 해결#

다음 절에서는 Bitbucket Cloud에서 가져올 때 발생할 수 있는 문제의 해결 방법을 설명합니다.

가져오기 프로세스에서 잘못된 계정 사용#

올바른 계정으로 로그인했는지 확인합니다. 실수로 잘못된 계정으로 가져오기를 시작했다면 다음 단계를 따릅니다:

  1. Bitbucket 계정에 대한 GitLab 액세스를 취소합니다. Bitbucket Cloud 리포지터리를 가져올 때의 과정을 되돌리는 작업입니다.
  2. Bitbucket 계정에서 로그아웃한 다음 Bitbucket Cloud 리포지터리 가져오기를 다시 수행합니다.

이름이 일치함에도 사용자 매핑 실패#

사용자 매핑이 동작하려면 Bitbucket 계정 설정의 사용자 이름이 Atlassian 계정 설정의 공개 이름과 일치해야 합니다.

두 이름이 일치하는데도 사용자 매핑이 실패한다면, 해당 사용자가 GitLab 프로필 서비스 로그인에서 Bitbucket 계정을 연결한 뒤에 Bitbucket 사용자 이름을 바꿨을 수 있습니다.

이 문제를 해결하려면 사용자가 GitLab 데이터베이스의 Bitbucket 외부 UID가 현재 Bitbucket 공개 이름과 일치하는지 확인하고, 일치하지 않으면 다시 연결해야 합니다:

  1. API로 인증된 사용자를 조회합니다.
  2. API 응답의 identities 속성에는 GitLab 데이터베이스에 존재하는 Bitbucket 계정이 들어 있습니다. extern_uid가 현재 Bitbucket 공개 이름과 일치하지 않으면 사용자는 GitLab 프로필 서비스 로그인에서 Bitbucket 계정을 다시 연결해야 합니다.
  3. 다시 연결한 뒤에는 API를 한 번 더 사용해 GitLab 데이터베이스의 extern_uid가 현재 Bitbucket 공개 이름과 일치하는지 확인해야 합니다.

그다음 프로젝트를 가져온 사용자가 가져온 프로젝트를 삭제하고 다시 가져와야 합니다.

관련 주제#