Git 저장소를 로컬 컴퓨터로 복제합니다

저장소를 복제하면 서버와 연결이 생성되고 원격 저장소의 파일이 컴퓨터로 다운로드됩니다.

이 연결을 위해 자격 증명을 추가해야 합니다. SSH 또는 HTTPS 중에서 선택할 수 있습니다. SSH를 권장합니다.

SSH로 복제

한 번만 인증하려면 SSH로 복제하세요.

  1. SSH 문서의 안내에 따라 GitLab에서 인증합니다.
  2. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 복제하려는 프로젝트를 찾습니다.
  3. 프로젝트 개요 페이지에서 오른쪽 상단에 있는 코드를 선택한 후 SSH로 복제하기의 URL을 복사합니다.
  4. 터미널을 열고 파일을 복제하려는 디렉터리로 이동합니다. Git은 자동으로 저장소 이름으로 폴더를 만들고 파일을 해당 폴더에 다운로드합니다.
  5. 이 명령을 실행합니다:

    git clone <복사한 URL>
    
  6. 파일을 보려면 새 디렉터리로 이동합니다:

    cd <새 디렉터리>
    

HTTPS로 복제

컴퓨터와 GitLab 간의 각 작업마다 인증을 하려면 HTTPS로 복제하세요. OAuth 자격 증명 도우미를 설치하면 수동으로 인증해야 하는 횟수를 줄일 수 있어 HTTPS가 원활한 경험을 제공합니다.

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 복제하려는 프로젝트를 찾습니다.
  2. 프로젝트 개요 페이지에서 오른쪽 상단에 있는 코드를 선택한 후 HTTPS로 복제하기의 URL을 복사합니다.
  3. 터미널을 열고 파일을 복제하려는 디렉터리로 이동합니다.
  4. 다음 명령을 실행합니다. Git은 저장소 이름으로 폴더를 만들고 파일을 해당 폴더에 다운로드합니다.

    git clone <복사한 URL>
    
  5. GitLab에서 사용자 이름과 비밀번호를 요청합니다.

    계정에 2차 인증(2FA)이 활성화되어 있다면 계정 비밀번호를 사용할 수 없습니다. 대신 다음 중 하나를 수행할 수 있습니다:

    • read_repository 또는 write_repository 권한을 가진 토큰을 사용하여 복제합니다.
    • OAuth 자격 증명 도우미를 설치합니다.

    2FA를 활성화하지 않았다면 계정 비밀번호를 사용하세요.

  6. 파일을 보려면 새 디렉터리로 이동합니다:

    cd <새 디렉터리>
    

참고: Windows에서 비밀번호를 여러 번 잘못 입력하고 “액세스 거부” 메시지가 표시되는 경우, 네임스페이스(사용자 이름 또는 그룹)를 경로에 추가합니다: git clone https://namespace@gitlab.com/gitlab-org/gitlab.git.

토큰을 사용하여 복제하기

HTTPS를 통해 토큰을 사용하여 복제하려면:

  • 2차 인증(2FA)을 사용하려면
  • 하나 이상의 저장소에 대해 취소할 수 있는 자격 증명을 사용하려면

HTTPS를 통해 복제할 때 다음 토큰 중 하나를 사용할 수 있습니다:

예시:

git clone https://<사용자 이름>:<토큰>@gitlab.example.com/tanuki/awesome_project.git

Apple Xcode에서 복제하고 열기

.xcodeproj 또는 .xcworkspace 디렉터리를 포함하는 프로젝트는 macOS의 Xcode로 복제할 수 있습니다.

  1. GitLab UI에서 프로젝트 개요 페이지로 이동합니다.
  2. 오른쪽 상단에서 코드를 선택합니다.
  3. Xcode를 선택합니다.

프로젝트가 컴퓨터에 복제되고 Xcode를 열도록 안내를 받습니다.

Visual Studio Code에서 복제하고 열기

GitLab 사용자 인터페이스에서 모든 프로젝트는 Visual Studio Code로 복제할 수 있지만 Visual Studio Code용 GitLab Workflow 확장을 설치하여 Visual Studio Code에서 복제할 수도 있습니다.

  • GitLab 인터페이스에서:
    1. 프로젝트 개요 페이지로 이동합니다.
    2. 오른쪽 상단에서 코드를 선택합니다.
    3. IDE에서 열기 아래에서 Visual Studio Code (SSH) 또는 Visual Studio Code (HTTPS)를 선택합니다.
    4. 프로젝트를 복제할 폴더를 선택합니다.

    Visual Studio Code가 프로젝트를 복제한 후 해당 폴더를 엽니다.

  • 확장이 설치된 Visual Studio Code에서, 확장의 Git: Clone 명령을 사용합니다.

IntelliJ IDEA에서 복제하고 열기

GitLab 사용자 인터페이스에서 모든 프로젝트는 IntelliJ IDEA에서 복제할 수 있습니다.

전제 조건:

다음을 수행합니다:

  1. 프로젝트 개요 페이지로 이동합니다.
  2. 오른쪽 상단에서 코드를 선택합니다.
  3. IDE에서 열기 아래에서 IntelliJ IDEA (SSH) 또는 IntelliJ IDEA (HTTPS)를 선택합니다.

복제 크기 축소

Git 저장소가 커질수록 다음과 같은 이유로 작업이 불편해질 수 있습니다:

  • 다운로드해야 하는 많은 이력.
  • 필요로 하는 디스크 공간이 많아진다.

부분 복제는 저장소의 완전한 사본 없이 Git이 작동할 수 있도록 하는 성능 최적화입니다. 이 작업의 목표는 Git이 매우 큰 저장소를 더 잘 다룰 수 있도록 하는 것입니다.

Git 2.22.0 이상이 필요합니다.

파일 크기로 필터링

Git에 대형 바이너리 파일을 저장하는 것은 대개 권장되지 않습니다. 외부에서 느린 또는 불안정한 인터넷 연결에서 작업할 때 특히 문제가 될 수 있는데 그 이유는 매번 클론하거나 변경 사항을 가져올 때마다 모든 큰 파일이 다운로드되기 때문입니다.

파일 크기 필터와 함께 부분 복제를 사용하여 이 문제를 해결할 수 있습니다. Git이 누락된 파일을 필요로할 때 해당 파일을 필요에 따라 다운로드합니다.

저장소를 복제할 때 --filter=blob:limit=<size> 인수를 사용합니다. 예를 들어, 1MB보다 큰 파일을 제외하고 저장소를 복제하려면:

git clone --filter=blob:limit=1m git@gitlab.com:gitlab-com/www-gitlab-com.git

위 명령은 다음과 같은 출력을 생성합니다:

'www-gitlab-com'로 복제 중...
원격 레포지토리 계산 중: 832467/832467개, 완료.
묶음 객체 개수 세는 중: 100% (832467/832467), 완료.
객체 압축 중: 100% (207226/207226), 완료.
총 832467 (delta 585563)개, 재사용 826624 (장바구니 재사용 580099) 
수신 중: 100% (832467/832467), 2.34 GiB | 5.05 MiB/s, 완료.
변경 처리 중: 100% (585563/585563), 완료.
원격 레포지토리 계산 중: 146개, 완료.
묶음 객체 개수 세는 중: 100% (146/146), 완료.
객체 압축 중: 100% (138/138), 완료.
총 146 (delta 8)개, 재사용 144 (장바구니 재사용 8)
수신 중: 100% (146/146), 471.45 MiB | 4.60 MiB/s, 완료.
변경 처리 중: (8/8), 완료.
파일 업데이트 중: 100% (13008/13008), 완료.
컨텐츠 필터링 중: 100% (3/3), 131.24 MiB | 4.65 MiB/s, 완료.

Git은 다음과 같은 작업을 수행합니다:

  1. 1MB를 초과하는 파일을 제외하고 저장소를 복제합니다.
  2. 기본 브랜치를 확인하기 위해 필요한 경우 누락된 큰 파일을 다운로드합니다.

브랜치를 변경할 때 Git은 누락된 파일을 다운로드할 수 있습니다.

객체 유형별로 필터링

수백만 개의 파일과 오랜 이력이 있는 저장소의 경우, 모든 파일을 제외하고 git sparse-checkout를 사용하여 작업 사본의 크기를 줄일 수 있습니다.

# 모든 파일을 제외하고 저장소 복제
$ git clone --filter=blob:none --sparse git@gitlab.com:gitlab-com/www-gitlab-com.git
'www-gitlab-com'으로 복제 중...
원격: 객체 열거 중: 678296, 완료.
원격: 객체 개수 세는 중: 100% (678296/678296), 완료.
원격: 객체 압축 중: 100% (165915/165915), 완료.
원격: 총 678296 (델타 472342), 재사용 673292 (델타 467476), 다른 것은 패킹 안 함
객체 받는 중: 100% (678296/678296), 81.06 MiB | 5.74 MiB/s, 완료.
델타 압축 중: 100% (472342/472342), 완료.
원격: 객체 열거 중: 28, 완료.
원격: 객체 개수 세는 중: 100% (28/28), 완료.
원격: 객체 압축 중: 100% (25/25), 완료.
원격: 총 28 (델타 0), 재사용 12 (델타 0), 다른 것은 패킹 안 함
객체 받는 중: 100% (28/28), 140.29 KiB | 341.00 KiB/s, 완료.
파일 업데이트 중: 100% (28/28), 완료.

$ cd www-gitlab-com

$ git sparse-checkout set 데이터 --cone
원격: 객체 열거 중: 301, 완료.
원격: 객체 개수 세는 중: 100% (301/301), 완료.
원격: 객체 압축 중: 100% (292/292), 완료.
원격: 총 301 (델타 16), 재사용 102 (델타 9), 다른 것은 패킹 안 함
객체 받는 중: 100% (301/301), 1.15 MiB | 608.00 KiB/s, 완료.
델타 압축 중: 100% (16/16), 완료.
파일 업데이트 중: 100% (302/302), 완료.

자세한 내용은 sparse-checkout에 대한 Git 설명서를 확인하세요.

파일 경로별로 필터링

부분 복제와 희소한 체크아웃 간의 긴밀한 통합은 --filter=sparse:oid=<blob-ish> 필터 사양을 통해 가능합니다. 이 필터링 모드는 .gitignore 파일과 유사한 형식을 사용하여 클론 및 가져오기 시 포함할 파일을 지정합니다.

경고: sparse 필터를 사용하는 부분 복제는 아직 실험 중입니다. 복제 및 가져오기 시 Gitaly 리소스 이용률이 느려질 수 있습니다. 대신 모든 blob을 필터링하고 sparse-checkout을 사용하세요. git-sparse-checkout을 사용하면 이러한 종류의 부분 복제 사용 방법을 단순화하고 제한을 극복할 수 있습니다.

자세한 내용은 rev-list-options에 대한 Git 설명서를 확인하세요.

  1. 필터 사양 생성. 예를 들어, 루트 디렉토리의 각기 다른 하위 디렉토리에 많은 응용 프로그램이 있는 단일 저장소를 고려해 보세요. shiny-app/.filterspec 파일을 만드세요.

    # 파일에서 나열된 경로만 부분 복제를 수행할 때 다운로드됩니다.
    # `--filter=sparse:oid=shiny-app/.gitfilterspec`를 사용하여 희소한 체크아웃을 구성하는 데 필요한 명시적인 필터 사양을 포함하세요.
    shiny-app/.gitfilterspec
    
    # Shiny 앱
    shiny-app/
    
    # 의존성
    shimmery-app/
    shared-component-a/
    shared-component-b/
    
  2. 경로별로 복제 및 필터링할 파일 생성. --filter=sparse:oid를 지원하는 clone 명령어는 희소 체크아웃과 완전히 통합되지 않았습니다.

    # 서버에 저장된 필터 사양을 사용하여 객체의 필터링된 집합을 복제합니다. 경고: 이 단계는 매우 느릴 수 있습니다!
    git clone --sparse --filter=sparse:oid=master:shiny-app/.gitfilterspec <url>
    
    # 선택 사항: 가져오지 않은 객체를 확인합니다.
    git rev-list --all --quiet --objects --missing=print | wc -l
    

    경고: bash, Zsh 등과 자동으로 Git 상태 정보를 표시하는 편집기와의 Git 통합은 종종 git fetch를 실행합니다. 저장소 전체를 가져오므로 이러한 통합을 사용하지 않거나 다시 구성해야 할 수 있습니다.

부분 복제 필터링 제거

부분 복제 필터링이 적용된 Git 저장소에서 필터링을 제거할 수 있습니다. 필터링을 제거하려면 다음을 수행하세요:

  1. 필터링으로 제외된 모든 항목을 가져와서 저장소가 완전한 상태임을 확인하세요. git sparse-checkout을 사용했다면 git sparse-checkout disable를 사용하여 비활성화하세요. 자세한 내용은 disable 설명서를 참조하세요.

    그런 다음 일반적인 fetch를 수행하여 저장소가 완전한 상태임을 보장하세요. git sparse-checkout을 사용하지 않을 때 특히 누락된 객체가 있는지 확인하고 가져오려면 다음 명령어를 사용할 수 있습니다.

    # 누락된 객체 표시
    git rev-list --objects --all --missing=print | grep -e '^\?'
    
    # '?' 문자가 아닌 누락된 객체 표시 (GNU grep 필요)
    git rev-list --objects --all --missing=print | grep -oP '^\?\K\w+'
    
    # 누락된 객체 가져오기
    git fetch origin $(git rev-list --objects --all --missing=print | grep -oP '^\?\K\w+')
    
    # 누락된 객체 수 표시
    git rev-list --objects --all --missing=print | grep -e '^\?' | wc -l
    
  2. 모든 것 다시 패킹. 예를 들어 git repack -a -d를 사용하여 수행할 수 있습니다. 이 작업을 통해 .git/objects/pack/에 세 개의 파일만 남아야 합니다.
    • pack-<SHA1>.pack 파일
    • 해당 pack-<SHA1>.idx 파일
    • pack-<SHA1>.promisor 파일
  3. .promisor 파일 삭제. 위 단계를 거치면 비어 있고 삭제해야 하는 하나의 pack-<SHA1>.promisor 파일만 남아야 합니다.

  4. 부분 복제 구성 삭제. Git 구성 파일에서 부분 복제 관련 구성 변수를 제거해야 합니다. 일반적으로 다음 구성만 제거하면 됩니다.
    • remote.origin.promisor
    • remote.origin.partialclonefilter