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개 이상의 노트나 diff 노트를 가져오지 못하도록 하는 제한이 있습니다. 이 한계에 도달하면 GitHub API는 대신 다음과 같은 오류를 반환합니다:

모든 사용자에 대해 API를 빠르게 유지하기 위해 이 자원에 대한 페이지네이션이 제한됩니다. 거슬러 올라갈 수 있는 가장 먼 곳을 확인하려면 링크 응답 헤더의 rel=last 링크 관계를 확인하세요.

댓글이 많은 GitHub 프로젝트를 가져올 때는 Use alternative comments import method 추가 가져올 항목 체크박스를 선택하세요. 이 설정을 사용하면 가져오기 프로세스에 네트워크 요청 수를 증가시켜 시간이 더 소요되지만 가져오기를 수행하는 데 필요한 작업을 늘립니다.

페이지당 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에 연결할 수 없음

GitHub에 연결할 수 없는 자체 관리형 GitLab 15.10 이전 버전이며 프록시 뒤에서 실행 중인 경우 github.com 또는 api.github.com의 DNS를 해결할 수 없습니다. GitLab 인스턴스는 가져오기 중에 GitHub에 연결하지 못하며 로컬 요청을 허용하는 목록에 github.comapi.github.com 항목을 추가해야 합니다.