Bitbucket Cloud에서 프로젝트 가져오기

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated
  • GitLab 16.6에서 도입된 Parallel imports from Bitbucket Cloud는 기본적으로 비활성화된 bitbucket_parallel_importer 플래그로 도입되었습니다.
  • GitLab 16.6에서 GitLab.com에서 활성화되었습니다.
  • GitLab 16.7에서 일반적으로 사용 가능합니다. 기능 플래그 bitbucket_parallel_importer가 제거되었습니다.
  • GitLab 17.2에서 몇 가지 가져온 항목에 대한 Imported 뱃지가 도입되었습니다.

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

Bitbucket 가져오기는 다음을 가져올 수 있습니다:

  • 저장소 설명
  • Git 저장소 데이터
  • 코멘트를 포함한 이슈
  • 코멘트를 포함한 풀 리퀘스트
  • 마일스톤
  • 위키
  • 라벨
  • 마일스톤
  • LFS 오브젝트

Bitbucket 가져오기는 다음을 가져올 수 없습니다:

  • 풀 리퀘스트 승인
  • 승인 규칙

가져올 때:

  • 풀 리퀘스트 및 이슈에 대한 참조가 보존됩니다.
  • 저장소 공개 액세스가 유지됩니다. Bitbucket에서 저장소가 비공개인 경우 GitLab에서도 비공개로 생성됩니다.
  • 가져온 이슈, 병합 요청 및 코멘트에 Imported 뱃지가 표시됩니다.

참고: Bitbucket Cloud 가져오기는 Bitbucket.org에서만 작동하며 Bitbucket Server(Stash로도 알려짐)와는 작동하지 않습니다. Bitbucket Server에서 프로젝트를 가져오려는 경우 Bitbucket Server 가져오기를 사용하세요.

이슈, 풀 리퀘스트 및 코멘트가 가져오는 경우, Bitbucket 가져오기는 작성자/담당자의 Bitbucket 닉네임을 사용하고 GitLab에서 동일한 Bitbucket 식별 정보를 찾습니다. 일치하지 않거나 GitLab 데이터베이스에서 사용자를 찾을 수 없는 경우 프로젝트 생성자(대부분 현재 가져오기 프로세스를 시작한 사용자)가 작성자로 설정되지만 이슈에 원래 Bitbucket 작성자에 대한 참조가 유지됩니다.

풀 리퀘스트의 경우:

  • 소스 SHA가 저장소에 존재하지 않는 경우 가져오기 프로그램은 소스 커밋을 병합 커밋 SHA로 설정하려고 시도합니다.
  • 병합 요청 담당자는 작성자로 설정됩니다. 리뷰어는 GitLab에서 Bitbucket 식별 정보와 일치하는 사용자 이름으로 설정됩니다.
  • GitLab의 병합 요청은 열림, 닫힘, 또는 병합됨일 수 있습니다.

이슈의 경우:

  • Bitbucket에서의 이슈 유형에 해당하는 라벨이 추가됩니다. bug, enhancement, proposal, 또는 task.
  • Bitbucket의 이슈가 해결됨, 잘못됨, 중복, 수행하지 않음, 또는 닫힘 중 하나인 경우 GitLab에서 해당 이슈는 닫힙니다.

가져오기 프로그램은 해당 네임스페이스(그룹)가 없는 경우 새로 생성하거나 네임스페이스가 사용 중인 경우 프로젝트가 가져오기 프로세스를 시작한 사용자의 네임스페이스 아래로 가져오기됩니다.

전제 조건

  • GitLab 16.0에 도입되었으며 GitLab 15.11.1 및 GitLab 15.10.5에 후행되었으며, 개발자 역할 대신 유지자 역할이 필요합니다.
  • Bitbucket Cloud 통합이 활성화되어야 합니다. 그 통합이 활성화되지 않은 경우, GitLab 관리자에게 요청하여 활성화되도록 하세요. Bitbucket Cloud 통합은 GitLab.com에서 기본적으로 활성화되어 있습니다.
  • Bitbucket Cloud 가져오기 원본이 활성화되어 있어야 합니다. 활성화되지 않은 경우 GitLab 관리자에게 요청하여 활성화되도록 하세요. Bitbucket Cloud 가져오기 원본은 GitLab.com에서 기본적으로 활성화되어 있습니다.
  • 가져올 대상 그룹에서 최소한 유지자 역할이 되어야 합니다.
  • Bitbucket의 풀 리퀘스트는 동일한 소스 및 대상 프로젝트여야 하며 프로젝트의 포크가 아니어야 합니다. 그렇지 않으면 풀 리퀘스트가 빈 병합 요청으로 가져와집니다.

사용자 매핑된 기여 요구 사항

프로젝트 가져오기 전에 각 사용자가 다음을 완료해야만 사용자 기여가 매핑됩니다:

  1. Bitbucket 계정 설정의 사용자 이름이 Atlassian 계정 설정의 공용 이름과 일치하는지 확인하세요. 일치하지 않는 경우 Atlassian 계정 설정의 공용 이름을 Bitbucket 계정 설정의 사용자 이름과 일치하도록 수정하세요.

  2. GitLab 프로필 서비스 로그인에서 Bitbucket 계정을 연결하세요.

  3. 공용 이메일을 설정하세요.

Bitbucket 리포지토리 가져오기

  • GitLab 15.9에서 도입된 프로젝트 재입력 기능이 있습니다.
  1. GitLab에 로그인하세요.
  2. 왼쪽 사이드바 상단에서 새 프로젝트/저장소 만들기를 선택하세요.
  3. 프로젝트 가져오기를 선택하세요.
  4. Bitbucket Cloud를 선택하세요.
  5. Bitbucket에 로그인하고 GitLab에 Bitbucket 계정 접근 권한을 부여하세요.

    접근 권한 부여

  6. 가져올 프로젝트를 선택하거나 모든 프로젝트를 가져올 수 있습니다. 프로젝트를 이름별로 필터링하고 각 프로젝트를 가져올 네임스페이스를 선택할 수 있습니다.

  7. 프로젝트를 가져오려면:
    • 처음 가져올 때: 가져오기를 선택하세요.
    • 이전에 가져왔던 경우: 다시 가져오기를 선택하세요. 새로운 이름을 지정하고 다시 다시 가져오기를 선택하세요. 다시 가져오기는 원본 프로젝트의 새 복사본을 생성합니다.

Bitbucket Cloud 앱 비밀번호 생성

GitLab REST API를 사용하여 Bitbucket Cloud 리포지토리를 가져오려면 Bitbucket Cloud 앱 비밀번호를 생성해야 합니다.

Bitbucket Cloud 앱 비밀번호를 생성하려면:

  1. https://bitbucket.org/account/settings/로 이동하세요.
  2. Access Management 섹션에서 App passwords를 선택하세요.
  3. 앱 비밀번호 만들기를 선택하세요.
  4. 비밀번호 이름을 입력하세요.
  5. 적어도 다음 권한을 선택하세요:

    계정: 이메일, 읽기
    프로젝트: 읽기
    저장소: 읽기
    풀 리퀘스트: 읽기
    이슈: 읽기
    위키: 읽기 및 쓰기
    
  6. 만들기를 선택하세요.

문제 해결

여러 개의 Bitbucket 계정을 보유한 경우

올바른 계정에 로그인했는지 확인하세요.

잘못된 계정으로 가져오기 프로세스를 시작한 경우 다음 단계를 따르세요:

  1. Bitbucket 저장소 가져오기 절차에 따라 GitLab이 Bitbucket 계정에 대한 액세스 권한을 취소합니다.

  2. Bitbucket 계정에서 로그아웃하세요. 이전 단계에서 링크된 절차를 따릅니다.

사용자 매핑이 일치함에도 실패하는 경우

사용자 매핑이 작동하려면, Bitbucket 계정 설정의 사용자 이름이 Atlassian 계정 설정의 공개된 이름과 일치하여야 합니다. 이러한 이름이 일치하지만 사용자 매핑이 여전히 실패하는 경우, 사용자가 Bitbucket 계정을 GitLab 프로필 서비스 로그인에서 연결한 후 Bitbucket 사용자 이름을 수정했을 수 있습니다.

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

  1. 현재 인증된 사용자를 가져오기 위해 API를 사용.

  2. API 응답에는 identities 속성에 GitLab 데이터베이스에 존재하는 Bitbucket 계정이 포함됩니다. 만약 extern_uid가 현재 Bitbucket 공개 이름과 일치하지 않는다면, 사용자는 GitLab 프로필 서비스 로그인에서 Bitbucket 계정을 다시 연결해야 합니다.

  3. 다시 연결한 후 사용자는 API를 사용하여 GitLab 데이터베이스 내에서 현재의 extern_uid가 현재 Bitbucket 공개 이름과 일치하는지 확인해야 합니다.

이후, 가져오기 도구는 가져온 프로젝트를 삭제한 뒤 다시 가져와야 합니다.