[Git&GitHub] git clone과 git fork의 차이점

2024. 2. 5. 20:46Git&GitHub

git clone과 git fork의 차이점

 
Git은 분산형 버전 관리 시스템이며 GitHub는 Git을 사용하는 프로젝트를 지원하는 호스팅 서비스입니다.
효율적인 협업과 프로젝트 관리를 위해서는 Git과 같은 도구를 이해하는 것이 필수적인데요. Git의 'clone'과 'fork'라는 두 가지 기본 작업에 대해 살펴보겠습니다. 언뜻 보기에는 유사해 보일 수도 있지만 서로 다른 목적으로 사용되며 서로 다른 시나리오에서 사용됩니다.
 

📍 git clone


✔️ 원격 저장소에서 로컬 저장소(로컬 컴퓨터)로 복사본을 만드는 데 사용되는 명령어
✔️ 프로젝트의 모든 파일 및 폴더의 모든 버전을 포함하여 해당 프로젝트에 대해 Git에 있는 모든 데이터의 전체 복사본을 가져옵니다.
➡️ 작업할 프로젝트의 로컬 복사본을 가져오려는 경우 유용합니다. 이는 다른 컴퓨터에서 시작한 프로젝트일 수도 있고 기여하려는 원격 저장소일 수도 있습니다.

🔍 작동방식: 

  1. 새 디렉터리 생성: Git은 로컬 컴퓨터에 새 디렉터리(폴더)를 생성하는데요. 이 디렉터리는 명령줄에서 다른 이름을 지정하지 않는 한 복제 중인 저장소와 동일한 이름을 갖습니다.
  2. .git 디렉터리 초기화: Git은 새로 생성된 디렉터리 내에서 .git이라는 숨겨진 하위 디렉터리를 초기화합니다. 이 .git 디렉터리는 Git이 저장소의 모든 메타데이터와 개체를 저장하는 곳입니다. 여기에는 커밋, 브랜치, 태그 등에 대한 정보가 포함됩니다. 기본적으로 .git 디렉터리는 이 디렉터리를 일반 폴더가 아닌 Git 저장소로 만드는 역할을 합니다.
  3. 리포지토리 데이터 내려받기(pull): .git 디렉터리를 초기화한 후 Git은 원격 저장소(예: GitHub, GitLab, Bitbucket 또는 다른 Git 서버)에서 리포지토리에 대한 모든 데이터를 내려받기 시작합니다. 이 데이터 전송에는 프로젝트 기록에 있는 모든 파일 및 디렉터리의 모든 버전이 포함됩니다. 이 단계는 로컬 컴퓨터에 전체 프로젝트 기록을 보관할 수 있어 오프라인에서도 이전 버전을 찾아보고 새 커밋을 만들고 프로젝트에 기여할 수 있기 때문에 중요합니다.
  4. 작업 복사본 체크아웃: 모든 데이터가 로컬 컴퓨터로 전송되면 원격 저장소의 기본 활성 브랜치로 체크아웃합니다. 이제 프로젝트의 완전한 로컬 작업 복사본을 갖게 되고, 작업을 시작할 준비가 완료된 것입니다.


📍 git fork


✔️ Git 자체에서의 명령이 아닙니다. 대신 GitHub, GitLab 또는 Bitbucket과 같은 호스팅 서비스에서 제공되는 기능입니다.
✔️ 호스팅 서비스 내에서 내 레포지토리에 다른 사람 프로젝트의 개인 복사본을 생성합니다.

➡️ 변경 사항을 직접 푸시할 수 있는 권한이 없을 때 프로젝트에 기여하는 방법입니다. 이는 프로젝트를 포크하고 변경한 다음 pull request를 통해 해당 변경 사항을 원래 프로젝트에 다시 제안할 수 있는 오픈 소스 프로젝트에서 일반적으로 사용됩니다.

➡️ 포크된 프로젝트는 본질적으로 호스팅 서비스의 자체 저장소(원격 저장소)이며 이를 로컬 컴퓨터에 clone 하고, 변경하고, 커밋, 푸시할 수 있습니다.

➡️ 포크를 사용하면 프로젝트 복사본을 완전히 제어할 수 있습니다. 원할 경우 원래 저장소에 영향을 주지 않고 프로젝트를 변경하고, 실험하고, 새로운 방향으로 진행할 수도 있습니다.


🔍 주요 차이점


✔️ 리포지토리 위치: 'git clone'은 로컬 컴퓨터에 리포지토리를 가져오고, 'git fork'는 원격 서버(예: GitHub)에 리포지토리 복사본을 만듭니다.
✔️소유권 및 권한: 포크를 사용하면 호스팅 서비스에 자신만의 저장소 버전을 보유할 수 있으므로 원본 저장소를 수정하지 않고도 변경 사항을 푸시할 수 있습니다. 반면에 clone은 원본 저장소에 대한 소유권이나 기여 권한을 의미하지 않습니다.

(참고) 오픈소스에 기여하는 법:
포크 후 원래 리포지토리에 기여하려면 일반적으로 포크된 리포지토리를 클론 받아 변경하고 이러한 변경 사항을 푸시한 다음 원래 리포지토리에 pull request 합니다.
클론을 통해 받은 프로젝트는 기여 권한이 있으면 변경 사항을 원격 저장소에 직접 푸시할 수 있습니다.
오픈소스에 기여하는 과정을 그림으로 나타내면 다음과 같습니다.

 

이상으로 git clone과 git fork에 대해 알아보았습니다. 

'Git&GitHub' 카테고리의 다른 글

[git] 브랜치와 Git Merge 방법  (0) 2024.03.20