git clone

여기서는 git clone 명령을 자세히 살펴보겠습니다. git clone은 기존 리포지토리를 대상으로 하여 복제본 또는 대상 리포지토리의 복제본을 만드는 데 사용되는 Git 명령줄 유틸리티입니다. 이 페이지에서는 확장 구성 옵션 및 git clone의 일반적인 사용 사례에 대해 설명합니다. 여기서 다루는 몇 가지 사항은 다음과 같습니다.

  • 로컬 또는 원격 리포지토리 복제
  • 베어(bare) 리포지토리 복제
  • 단순(shallow) 복제 옵션을 사용하여 리포지토리 부분 복제
  • Git URL 구문 및 지원되는 프로토콜

리포지토리 설정 가이드에서는 git clone의 기본 사용 사례를 다루었습니다. 이 페이지에서는 더 복잡한 복제 및 구성 시나리오를 살펴보겠습니다.

목적: 리포지토리 간 공동 작업 개발 복사

프로젝트가 중앙 리포지토리에 이미 설정된 경우 사용자가 개발 복사본을 받는 가장 일반적인 방법은 git clone 명령입니다. git init와 같이 복제는 일반적으로 일회성 작업입니다. 개발자가 작업 복사본을 받으면 모든 버전 제어 작업 및 공동 작업이 로컬 리포지토리를 통해 관리됩니다.

리포지토리 간 공동 작업

"작업 복사본"에 대한 Git의 아이디어는 SVN 리포지토리의 코드를 체크아웃하여 얻는 작업 복사본과 매우 다르다는 점을 이해하는 것이 중요합니다. SVN과 달리 Git은 작업 복사본과 중앙리포지토리를 구별하지 않습니다. 모두 완전한 Git 리포지토리입니다.

이 때문에 Git을 사용한 공동 작업은 SVN과 근본적으로 다릅니다. SVN은 중앙 리포지토리와 작업 복사본 간의 관계에 따라 달라지지만, Git의 공동 작업 모델은 리포지토리 간 상호 작용을 기반으로 합니다. SVN의 중앙 리포지토리에 대한 작업 복사본을 확인하는 대신 한 리포지토리에서 다른 리포지토리로 커밋을 푸시 또는 합니다.

Git 자습서: 작업 복사본 공동 작업에 대한 리포지토리 Git 자습서: 리포지토리 간 공동 작업

물론 특정 Git 리포지토리에 특별한 의미를 부여하는 것을 막을 수 없습니다. 예를 들어 한 Git 리포지토리를 “중앙” 리포지토리로 지정하여 Git을 사용하는 중앙 워크플로를 복제할 수 있습니다. 요점은 VCS 자체에 고정되어 있지 않으며 관습을 통해 수행된다는 것입니다.

사용

git clone은 주로 기존 리포지토리를 가리키고, 새 디렉터리의 다른 위치에서 복제본 또는 해당 리포지토리의 복제본을 만드는 데 사용됩니다. 원본 리포지토리는 로컬 파일 시스템 또는 지원되는 프로토콜을 통해 액세스할 수 있는 원격 컴퓨터에 위치할 수 있습니다. git clone 명령은 기존 Git 리포지토리를 복사합니다. 이것은 SVN 체크아웃과 비슷하지만 "작업 복사본"은 완전한 Git 리포지토리입니다. 즉, 자체 기록이 있고, 자체 파일을 관리하며, 원본 리포지토리와 완전히 격리된 환경입니다.

편의상 복제하면 원본 리포지토리를 다시 가리키는 "origin"이라는 원격 연결을 자동으로 만듭니다. 따라서 중앙 리포지토리과 매우 쉽게 상호 작용할 수 있습니다. 이 자동 연결은 refs/remotes/origin 아래의 원격 브랜치 헤드에 대한 Git ref를 만들고 remote.origin.urlremote.origin.fetch 구성 변수를 초기화하여 설정합니다.

git clone 사용에 대한 예제는 리포지토리 설정 가이드에서 찾을 수 있습니다. 아래 예제에서는 SSH 사용자 이름 john을 사용하여 example.com에서 액세스할 수 있는 서버에 저장된 중앙 리포지토리 로컬 복사본을 얻는 방법을 보여줍니다.

git clone ssh://john@example.com/path/to/my-project.git 
cd my-project 
# Start working on the project

첫 번째 명령은 로컬 컴퓨터의 my-project 폴더에서 새 Git 리포지토리를 초기화하고 중앙 리포지토리의 콘텐츠로 채웁니다. 그런 다음 프로젝트로 디렉터리를 변경(cd)하여 파일을 편집하고 스냅샷을 커밋하고 다른 리포지토리와의 상호 작용을 시작할 수 있습니다. 참고로 .git 확장명이 복제된 리포지토리에서 생략되었습니다. 이것은 로컬 복사본의 간략하지 않은(non-bare) 상태를 반영합니다.

특정 폴더로 복제

git clone <repo> <directory>

<repo>에 있는 리포지토리를 로컬 컴퓨터의 ~<directory>! 폴더로 복제합니다.

특정 태그 복제

git clone --branch <tag> <repo>

<repo>에 있는 리포지토리를 복제하고, <tag>의 ref만 복제합니다.

부분 복제

git clone -depth=1 <repo>

<repo>에 있는 리포지토리를 복제하고 옵션 깊이=1로 지정된 커밋 기록만
복제합니다. 이 예제에서는 <repo> 의 복제본이 만들어지며, 가장 최근 커밋만 새로 복제된 리포지토리에 포함됩니다. 부분 복제는 광범위한 커밋 기록이 있는 리포지토리로 작업할 때 가장 유용합니다. 광범위한 커밋 기록으로 인해 디스크 공간 사용량 제한 및 복제 시 긴 대기 시간과 같은 확장 문제가 발생할 수 있습니다. 부분 복제는 확장 문제를 완화하는 데 도움이 될 수 있습니다.

구성 옵션

git clone -branch

-branch 인수를 사용하면 원격 HEAD가 가리키는 브랜치(일반적으로 메인 브랜치) 대신 복제할 특정 브랜치를 지정할 수 있습니다. 또한 동일한 효과를 위해 브랜치 대신 태그를 전달할 수 있습니다.

git clone -branch new_feature git://remoterepository.git

위의 예제는 원격 Git 리포지토리의 new_feature 브랜치만 복제합니다. 이 유틸리티는 리포지토리의 HEAD ref를 다운로드한 다음 필요한 ref를 추가로 가져와야 하는 시간을 절약할 수 있어 편리합니다.

git clone -mirror 및 git clone -bare 비교

git clone --bare

git init --bare와 유사하게 -bare 인수가 git clone 명령에 전달되면, 생략된 작업 디렉터리로 원격 리포지토리의 복사본이 만들어집니다. 즉, 푸시하고 끌어올 수는 있지만 직접 편집할 수는 없는 프로젝트의 기록이 포함된 리포지토리가 설정됩니다. 또한 리포지토리의 원격 브랜치는 -bare 리포지토리로 구성되지 않습니다. git init --bare와 마찬가지로 개발자가 직접 편집하지 않는 호스팅 리포지토리를 만드는 데 사용됩니다.

git clone --mirror

--mirror 인수를 전달하면 --bare 인수도 암시적으로 전달됩니다. 즉, --bare 동작은 --mirror가 상속합니다. 결과적으로 편집 가능한 작업 파일이 없는 베어 리포지토리가 됩니다. 또한 --mirror는 원격 리포지토리의 모든 확장된 ref를 복제하고 원격 브랜치 추적 구성을 유지합니다. 그런 다음 미러에서 git remote 업데이트를 실행하면 원본 리포지토리 내 모든 ref를 덮어씁니다. 정확한 '미러링' 기능을 제공합니다.

기타 구성 옵션

기타 git clone 옵션의 전체 목록은 공식 Git 설명서를 참조하세요. 이 문서에서는 몇 가지 일반적인 옵션을 다룰 것입니다.

git clone --template

git clone --template=<template_directory> <repo location>

<repo location>에 리포지토리를 복제하고, <template directory> 템플릿을 새로 만든 로컬 브랜치에 적용합니다. Git 템플릿에 대한 자세한 참조는 git init 페이지에서 찾을 수 있습니다.

Git URL

Git에는 원격 리포지토리 위치를 Git 명령으로 전달하는 데 사용하는 자체 URL 구문이 있습니다. git clone은 원격 리포지토리에서 가장 일반적으로 사용되므로 여기에서는 Git URL 구문을 살펴보겠습니다.

Git URL 프로토콜

-SSH

SSH(Secure Shell)는 일반적으로 대부분의 서버에서 기본값으로 구성되는 널리 사용되는 인증 네트워크 프로토콜입니다. SSH는 인증된 프로토콜이므로 연결하기 전에 호스팅 서버로 자격 증명을 설정해야 합니다. ssh://[user@]host.xz[:port]/path/to/repo.git/

- GIT

Git 고유의 프로토콜입니다. Git은 포트(9418) 에서 실행되는 디먼과 함께 제공됩니다. 프로토콜은 SSH와 유사하지만 인증이 없습니다. git://host.xz[:port]/path/to/repo.git/

- HTTP

하이퍼 텍스트 전송 프로토콜입니다. 인터넷을 통해 웹 페이지 HTML 데이터를 전송하는 데 가장 일반적으로 사용되는 웹 프로토콜입니다. Git은 HTTP http[s]://host.xz[:port]/path/to/repo.git/를 통해
통신하도록 구성할 수 있습니다

요약

이 문서에서는 git clone에 대해 자세히 살펴보았습니다. 주요 내용은 다음과 같습니다.

1. git clone은 대상 리포지토리 복사본을 만드는 데 사용됩니다

2. 대상 리포지토리는 로컬 또는 원격일 수 있습니다

3. Git은 원격 리포지토리에 연결할 수 있는 몇 가지 네트워크 프로토콜을 지원합니다

4. 복제본의 콘텐츠를 변경하는 다양한 구성 옵션을 사용할 수 있습니다

git clone 기능에 대한 자세한 내용은 공식 Git 설명서를 참조하세요. Atlassian 리포지토리 설정 가이드에서 git clone 의 실제 예제도 다룹니다.

Git을 배울 준비가 되었습니까?

이 대화형 자습서를 사용해 보세요.

지금 시작하기