- SSH로 클론하기
- HTTPS로 클론하기
- Apple Xcode에서 클론하고 열기
- Visual Studio Code에서 클론하고 열기
- IntelliJ IDEA에서 클론하고 열기
- 클론 크기 줄이기
Git 저장소를 로컬 컴퓨터로 클론하기
저장소를 클론하면 서버와 연결이 생성되고 원격 저장소의 파일이 컴퓨터로 다운로드됩니다.
이 연결은 자격 증명을 추가해야 합니다. SSH 또는 HTTPS를 사용할 수 있습니다. SSH를 권장합니다.
SSH로 클론하기
한 번만 인증하고 싶을 때 SSH로 클론하세요.
-
SSH 문서의 지침을 따라 GitLab에 인증합니다.
-
왼쪽 사이드바에서 검색 또는 이동을 선택하고 클론하고 싶은 프로젝트를 찾습니다.
-
프로젝트 개요 페이지 오른쪽 상단에서 코드를 선택한 다음 SSH로 클론의 URL을 복사합니다.
-
터미널을 열고 파일을 클론할 디렉터리로 이동합니다.
Git은 자동으로 저장소 이름으로 폴더를 생성하고 그곳에 파일을 다운로드합니다. -
다음 명령어를 실행합니다:
git clone <복사한 URL>
-
파일을 보려면 새로운 디렉터리로 이동합니다:
cd <새 디렉터리>
HTTPS로 클론하기
컴퓨터와 GitLab 간의 작업을 수행할 때마다 인증하고 싶을 때 HTTPS로 클론하세요.
OAuth 자격 증명 도우미는
귀하가 수동으로 인증해야 하는 횟수를 줄여주어 HTTPS를 원활한 경험으로 만듭니다.
-
왼쪽 사이드바에서 검색 또는 이동을 선택하고 클론하고 싶은 프로젝트를 찾습니다.
-
프로젝트 개요 페이지 오른쪽 상단에서 코드를 선택한 다음 HTTPS로 클론의 URL을 복사합니다.
-
터미널을 열고 파일을 클론할 디렉터리로 이동합니다.
-
다음 명령어를 실행합니다. Git은 자동으로 저장소 이름으로 폴더를 생성하고 그곳에 파일을 다운로드합니다.
git clone <복사한 URL>
-
GitLab이 사용자 이름과 비밀번호를 요청합니다.
계정에서 이중 인증(2FA)을 활성화한 경우, 계정 비밀번호를 사용할 수 없습니다. 대신 다음 중 하나를 수행할 수 있습니다:
-
read_repository
또는write_repository
권한이 있는 토큰을 사용하여 클론하기. - OAuth 자격 증명 도우미를 설치하기.
2FA를 활성화하지 않은 경우, 계정 비밀번호를 사용하세요.
-
-
파일을 보려면 새로운 디렉터리로 이동합니다:
cd <새 디렉터리>
참고:
Windows에서 비밀번호를 여러 번 잘못 입력하고 Access denied
메시지가 나타나면,
경로에 네임스페이스(사용자 이름 또는 그룹)를 추가하세요:
git clone https://namespace@gitlab.com/gitlab-org/gitlab.git
.
토큰을 사용하여 클론하기
다음과 같은 경우 HTTPS로 클론할 때 토큰을 사용하세요:
- 2FA를 사용하고 싶을 때.
- 하나 이상의 저장소에 범위가 있는 철회 가능한 자격 증명 세트를 원할 때.
HTTPS를 통해 클론할 때 인증하는 데 사용할 수 있는 토큰은 다음과 같습니다:
예를 들어:
git clone https://<사용자 이름>:<토큰>@gitlab.example.com/tanuki/awesome_project.git
Apple Xcode에서 클론하고 열기
.xcodeproj
또는 .xcworkspace
디렉터리를 포함하는 프로젝트는 macOS에서 Xcode로 클론할 수 있습니다.
- GitLab UI에서 프로젝트 개요 페이지로 이동합니다.
- 오른쪽 상단 모서리에서 Code를 선택합니다.
- Xcode를 선택합니다.
프로젝트가 컴퓨터에 클론되고 Xcode를 열라는 메시지가 표시됩니다.
Visual Studio Code에서 클론하고 열기
모든 프로젝트는 GitLab 사용자 인터페이스에서 Visual Studio Code로 클론할 수 있지만, VS Code용 GitLab Workflow 확장을 설치하여 Visual Studio Code에서 클론할 수도 있습니다:
- GitLab 인터페이스에서:
- 프로젝트 개요 페이지로 이동합니다.
- 오른쪽 상단 모서리에서 Code를 선택합니다.
- Open in your IDE에서 Visual Studio Code (SSH) 또는 Visual Studio Code (HTTPS)를 선택합니다.
-
프로젝트를 클론할 폴더를 선택합니다.
Visual Studio Code가 프로젝트를 클론한 후 폴더를 엽니다.
- Visual Studio Code에서, 확장이 설치되어 있을 때,
확장의
Git: Clone
명령을 사용합니다.
IntelliJ IDEA에서 클론하고 열기
모든 프로젝트는 GitLab 사용자 인터페이스에서 IntelliJ IDEA로 클론할 수 있습니다.
전제 조건:
- JetBrains Toolbox App도 설치되어 있어야 합니다.
이를 수행하려면:
- 프로젝트 개요 페이지로 이동합니다.
- 오른쪽 상단 모서리에서 Code를 선택합니다.
- Open in your IDE에서 IntelliJ IDEA (SSH) 또는 IntelliJ IDEA (HTTPS)를 선택합니다.
클론 크기 줄이기
Git 저장소의 크기가 커짐에 따라 작업이 불편해질 수 있습니다. 그 이유는 다음과 같습니다:
- 다운로드해야 하는 방대한 이력.
- 요구하는 큰 디스크 공간.
부분 클론은 Git이 저장소의 전체 복사본 없이 기능할 수 있게 해주는 성능 최적화입니다. 이 작업의 목표는 Git이 매우 큰 저장소를 더 잘 처리할 수 있도록 하는 것입니다.
Git 2.22.0 이상이 필요합니다.
파일 크기로 필터링
Git에 큰 바이너리 파일을 저장하는 것은 일반적으로 권장되지 않습니다. 이는 추가된 큰 파일이 이후에 클론하거나 변경 사항을 가져오는 모든 사용자에게 다운로드되기 때문입니다.
이러한 다운로드는 느리고 문제를 일으킬 수 있으며, 특히 느리거나 신뢰할 수 없는 인터넷 연결에서 작업할 때 더욱 그렇습니다.
파일 크기 필터가 있는 부분 클론을 사용하면 문제를 해결할 수 있으며, 클론 및 가져오기에서 문제를 일으키는 큰 파일을 제외합니다. Git이 누락된 파일을 발견하면, 해당 파일은 필요할 때 다운로드됩니다.
저장소를 클론할 때 --filter=blob:limit=<size>
인수를 사용합니다. 예를 들어,
1메가바이트보다 큰 파일을 제외하고 저장소를 클론하려면:
git clone --filter=blob:limit=1m git@gitlab.com:gitlab-com/www-gitlab-com.git
이것은 다음과 같은 출력을 생성합니다:
Cloning into 'www-gitlab-com'...
remote: Enumerating objects: 832467, done.
remote: Counting objects: 100% (832467/832467), done.
remote: Compressing objects: 100% (207226/207226), done.
remote: Total 832467 (delta 585563), reused 826624 (delta 580099), pack-reused 0
Receiving objects: 100% (832467/832467), 2.34 GiB | 5.05 MiB/s, done.
Resolving deltas: 100% (585563/585563), done.
remote: Enumerating objects: 146, done.
remote: Counting objects: 100% (146/146), done.
remote: Compressing objects: 100% (138/138), done.
remote: Total 146 (delta 8), reused 144 (delta 8), pack-reused 0
Receiving objects: 100% (146/146), 471.45 MiB | 4.60 MiB/s, done.
Resolving deltas: 100% (8/8), done.
Updating files: 100% (13008/13008), done.
Filtering content: 100% (3/3), 131.24 MiB | 4.65 MiB/s, done.
출력이 더 긴 이유는 Git이:
- 1메가바이트보다 큰 파일을 제외하고 저장소를 클론합니다.
- 기본 브랜치를 체크 아웃하는 데 필요한 누락된 큰 파일을 다운로드합니다.
브랜치를 변경할 때 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), 패키지 재사용 0
객체 수신 중: 100% (678296/678296), 81.06 MiB | 5.74 MiB/s, 완료.
델타 해결 중: 100% (472342/472342), 완료.
원격: 객체 수 세기: 28, 완료.
원격: 객체 수 세기: 100% (28/28), 완료.
원격: 객체 압축: 100% (25/25), 완료.
원격: 총 28 (델타 0), 재사용 12 (델타 0), 패키지 재사용 0
객체 수신 중: 100% (28/28), 140.29 KiB | 341.00 KiB/s, 완료.
파일 업데이트 중: 100% (28/28), 완료.
$ cd www-gitlab-com
$ git sparse-checkout set data --cone
원격: 객체 수 세기: 301, 완료.
원격: 객체 수 세기: 100% (301/301), 완료.
원격: 객체 압축: 100% (292/292), 완료.
원격: 총 301 (델타 16), 재사용 102 (델타 9), 패키지 재사용 0
객체 수신 중: 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 리소스 활용도를 크게 증가시킬 수 있습니다. 대신 모든 블롭 필터링 및 스패스 체크아웃 사용하세요. git-sparse-checkout
는 이러한 유형의 부분 클론 사용을 간소화하고 그 한계를 극복합니다.
더 많은 세부사항은 rev-list-options
에 대한 Git 문서를 참조하세요.
-
필터 사양을 만듭니다. 예를 들어, 루트의 서로 다른 하위 디렉토리에 여러 애플리케이션이 있는 단일 리포지토리를 고려하십시오. 다음과 같은 파일
shiny-app/.filterspec
을 만듭니다:# 파일에 나열된 경로만 다운로드됩니다. # --filter=sparse:oid=shiny-app/.gitfilterspec를 사용하여 부분 클론을 수행할 때 # 스패스 체크아웃을 구성하는 데 필요한 필터 사양 포함 # git config --local core.sparsecheckout true # git show master:snazzy-app/.gitfilterspec >> .git/info/sparse-checkout shiny-app/.gitfilterspec # Shiny App shiny-app/ # 의존성 shimmery-app/ shared-component-a/ shared-component-b/
-
경로로 필터링하고 클론합니다.
--filter=sparse:oid
에 대한 지원은 클론 명령과 완전히 통합되어 있지 않습니다.# 서버에 저장된 필터 사양을 사용하여 필터링된 객체 세트를 클론합니다. 경고: 이 단계는 매우 느릴 수 있습니다! 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 저장소에서 필터링을 제거할 수 있습니다. 필터링을 제거하려면:
-
필터에 의해 제외된 모든 항목을 가져와서 저장소가 완전한지 확인합니다.
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
- 모든 것을 재팩킹합니다. 예를 들어
git repack -a -d
를 사용하여 수행할 수 있습니다. 이 작업을 수행하면.git/objects/pack/
에 다음 세 파일만 남아야 합니다:-
pack-<SHA1>.pack
파일. - 해당하는
pack-<SHA1>.idx
파일. -
pack-<SHA1>.promisor
파일.
-
-
.promisor
파일을 삭제합니다. 위의 단계에서는 단 하나의pack-<SHA1>.promisor
파일만 남아 있어야 하며, 이 파일은 비어 있어야 하고 삭제해야 합니다. - 부분 클론 구성을 제거합니다. 부분 클론 관련 구성 변수가 Git 구성 파일에서 제거되어야 합니다. 일반적으로 다음 구성만 제거해야 합니다:
-
remote.origin.promisor
. -
remote.origin.partialclonefilter
.
-