GitHub에서 GitLab로 프로젝트 가져오기 문제 해결

GitHub에서 GitLab로 프로젝트를 가져올 때 다음과 같은 문제를 만날 수 있습니다.

이전에 실패한 가져오기 프로세스를 수동으로 계속하기

경우에 따라 GitHub 가져오기 프로세스가 리포지토리를 가져오는 데 실패할 수 있습니다. 이로 인해 GitLab이 프로젝트 가져오기 프로세스를 중단하고 리포지토리를 수동으로 가져와야 합니다. 관리자는 실패한 가져오기 프로세스에 대해 리포지토리를 수동으로 가져올 수 있습니다:

  1. Rails 콘솔을 엽니다.

  2. 콘솔에서 다음 일련의 명령을 실행합니다:

    project_id = <PROJECT_ID>
    github_access_token =  <GITHUB_ACCESS_TOKEN>
    github_repository_path = '<GROUP>/<REPOSITORY>'
    
    github_repository_url = "https://#{github_access_token}@github.com/#{github_repository_path}.git"
    
    # ID로 프로젝트 찾기
    project = Project.find(project_id)
    # 가져오기 URL 및 자격 증명 설정
    project.import_url = github_repository_url
    project.import_type = 'github'
    project.import_source = github_repository_path
    project.save!
    # 프로젝트가 수동으로 생성되었고 실패한 가져기에서 가져온 것이 아닌 경우 가져오기 상태 생성
    project.create_import_state if project.import_state.blank?
    # 상태를 시작으로 설정
    project.import_state.force_start
    
    # 선택 사항: 가져오기에서 특정 선택적 단계가 선택되었거나 타임아웃 전략이 설정된 경우 여기에서 재설정할 수 있습니다. 아래는 예시입니다.
    # 매개변수는 API에 문서화된 형식을 따릅니다:
    # https://docs.gitlab.com/ee/api/import.html#import-repository-from-github
    Gitlab::GithubImport::Settings
    .new(project)
    .write(
      timeout_strategy: "optimistic",
      optional_stages: {
        single_endpoint_issue_events_import: true,
        single_endpoint_notes_import: true,
        attachments_import: true,
        collaborators_import: true
      }
    )
    
    # 두 번째 단계에서 가져오기 트리거
    Gitlab::GithubImport::Stage::ImportRepositoryWorker.perform_async(project.id)
    

접두사가 누락되어 가져오기 실패

GitLab 16.5 이상에서는 Import failed due to a GitHub error: (HTTP 406)라는 오류가 발생할 수 있습니다.

이 문제는 GitLab 16.5에서 GitHub 가져오기 도구에서 경로 접두사 api/v3가 제거되었기 때문에 발생합니다. 이는 가져오기 도구가 Gitlab::LegacyGithubImport::Client를 사용하지 않게 되었기 때문입니다. 이 클라이언트는 GitHub Enterprise URL에서 가져올 때 자동으로 api/v3 접두사를 추가했습니다.

이 오류를 해결하려면 GitHub Enterprise URL에서 가져올 때 api/v3 접두사 추가를 수행하세요.

대형 프로젝트 가져오기 시 오류 발생

GitHub 가져오기 도구는 대형 프로젝트를 가져올 때 일부 오류가 발생할 수 있습니다.

댓글 누락

GitHub API에는 약 30,000개의 노트 또는 차이 노트를 초과하여 가져오는 것을 방지하는 제한이 있습니다. 이 제한에 도달하면 GitHub API는 다음 오류를 반환합니다:

모두에게 API를 빠르게 유지하기 위해 이 리소스에 대한 페이지네이션이 제한됩니다. 링크 응답 헤더의 rel=last 링크 관계를 확인하여 얼마나 멀리 돌아갈 수 있는지 확인하세요.

댓글 수가 많은 GitHub 프로젝트를 가져올 때, 대체 댓글 가져오기 방법 사용 가져올 추가 항목 체크박스를 선택하세요. 이 설정은 가져오기 프로세스에 필요한 네트워크 요청 수를 증가시켜 가져오기를 오래 걸리게 만듭니다.

GitHub API 요청 객체 수 줄이기

일부 GitHub API 엔드포인트는 큰 리포지토리에서 프로젝트 가져오기 시 500 또는 502 오류를 반환할 수 있습니다.

이러한 오류의 가능성을 줄이기 위해 데이터 가져오는 그룹 프로젝트에서 github_importer_lower_per_page_limit 기능 플래그를 활성화하세요.

활성화되면 이 플래그는 페이지 크기를 100에서 50으로 줄입니다.

이 기능 플래그를 활성화하려면:

  1. Rails 콘솔을 시작합니다.
  2. 다음 enable 명령을 실행합니다:

    group = Group.find_by_full_path('my/group/fullpath')
    
    # 활성화
    Feature.enable(:github_importer_lower_per_page_limit, group)
    

기능 플래그를 비활성화하려면 다음 명령을 실행합니다:

# 비활성화
Feature.disable(:github_importer_lower_per_page_limit, group)

GitLab 인스턴스가 GitHub에 연결할 수 없음

GitLab 15.10 또는 이전 버전을 실행하는 자가 관리 인스턴스가 프록시 뒤에 있을 경우 github.com 또는 api.github.com에 대한 DNS를 해결할 수 없습니다.

GitLab 인스턴스는 가져기 과정 중 GitHub에 연결하지 못하며, 로컬 요청을 위한 허용 목록github.comapi.github.com 항목을 추가해야 합니다.