Git

Git - 복제와 가져오기(Cloning and Fetching)

Namiz_IT 2024. 7. 27. 10:17

 

원격 저장소 복제하기

 원격 저장소를 복제하는 것은 다른 사람들과 Git 프로젝트에서 협업할 수 있는 필수적인 부분이다. 이를 통해 다른 사람들이 자신의 컴퓨터에서 저장소 사본을 가지고 작업할 수 있다. 접근 권한이 부여된 사람이라면 누구나 원격 저장소를 복제할 수 있다.

 예컨데, Book 프로젝트를 처음에는 혼자 작업할 계획이었지만, 나중에 공동 저자와 함께 작업하기로 결정했다고 가정해보자. 공동 저자는 책 작업을 함께 시작하려면 원격 저장소를 복제하여 자신의 컴퓨터에 책 프로젝트 사본을 가져와야 한다. 이를 위해서는 호스팅 서비스에 계정이 있어야 한다. 그런 다음 편집 권한을 부여하여 공동 저자가 댓글을 달고 기여할 수 있도록 해야 한다. 이는 저장소가 공개 또는 비공개인지에 관계없이 필요한 절차이다. 언젠가 편집자가 제 작업을 검토하고 싶어한다면 같은 단계를 거쳐야 한다. 편집자는 호스팅 서비스에 계정을 만들고, 저는 편집자에게 저장소에 대한 액세스 권한을 부여하고 위치를 알려주면, 편집자는 저장소를 컴퓨터에 복제할 수 있다. 이는 Git 프로젝트에서 다른 사람들과 협업할 때 저장소 복제가 얼마나 중요한지 보여준다.


협업 시뮬레이션

 일반적으로 두 사람이 같은 프로젝트에서 작업하는 경우, 각자 자신의 컴퓨터에 로컬 저장소를 가지고 있으며, 모두 동일한 원격 저장소에 기여하게 된다. Git에서는 복사 또는 복제라는 용어를 사용하여 원격 저장소를 컴퓨터에 복사하여 로컬 저장소를 만드는 프로세스를 나타내며, 이를 수행하는 데 사용하는 명령어는 git clone이다. 원격 저장소를 복제하려면 git clone 명령어를 사용하고 원격 저장소 URL과 선택적으로 프로젝트 디렉토리 이름을 입력한다

git clone <URL> [<프로젝트 디렉토리 이름>]

 

 프로젝트 디렉토리 이름을 입력하지 않으면 로컬 저장소에는 원격 저장소 프로젝트 이름이 지정된다. git clone 명령어는 다음 작업을 수행한다.

  1. 현재 디렉토리 내부에 프로젝트 디렉토리 생성
  2. 로컬 저장소 생성 (초기화)
  3. 원격 저장소에서 모든 데이터 다운로드
  4. 복제된 원격 저장소에 대한 연결 추가 (기본적으로 새 로컬 저장소에서 shortname origin을 가짐)

 생성되는 저장소를 명확하게 확인하기 위해 데스크톱 디렉토리에 복제할 수 있다. 이렇게 하면 컴퓨터 데스크톱에 새 프로젝트 디렉토리가 나타나는 것을 볼 수 있다.

 

origin/Head란 무엇인가?

Git에서 origin/HEAD는 원격 저장소(보통은 GitHub, GitLab 등)의 현재 브랜치를 가리키는 포인터이다.

좀 더 자세히 설명하자면,

  • origin: 일반적으로 Git에서 원격 저장소를 가리키는 기본 이름이다. 즉, origin/HEAD는 특정 원격 저장소를 지칭한다.
  • HEAD: 현재 작업하고 있는 커밋을 가리키는 포인터입니다. origin/HEAD는 원격 저장소의 HEAD, 즉 원격 저장소에서 현재 활성화된 브랜치를 가리킨다.

간단히 말해, origin/HEAD는 다음과 같은 의미를 지닌다.

  • 원격 저장소의 현재 상태: 원격 저장소에서 어떤 브랜치가 현재 활성화되어 있는지를 알려준다.
  • 로컬 저장소와의 비교 기준: 로컬 저장소의 변경 사항을 원격 저장소에 반영하거나, 원격 저장소의 변경 사항을 로컬 저장소로 가져올 때 비교 대상이 된다.

origin 단축명

origin은 Git에서 원격 저장소를 가리키는 일반적인 이름이다.

  • 원격 저장소: 로컬 컴퓨터에 있는 프로젝트 파일을 인터넷 상의 서버에 백업하고, 다른 사람들과 공유할 수 있도록 저장하는 곳이다. (예: GitHub, GitLab)
  • 단축명: 길고 복잡한 원격 저장소의 URL을 간단하게 부르기 위한 별칭이다.

왜 origin이라고 부르나요?

  • 기본 설정: Git에서 새 프로젝트를 만들거나 기존 프로젝트를 복제(clone)할 때, 원격 저장소를 자동으로 origin이라는 이름으로 등록한다.
  • 편의성: 긴 URL 대신 간단한 단축명을 사용하여 명령어를 입력하면 더욱 편리하다.

origin을 사용하는 이유

  • 명령어 간소화 : git push origin main처럼 긴 URL 대신 origin을 사용하여 명령어를 간결하게 만들 수 있다.
  • 가독성 향상 : 복잡한 명령어에서 origin을 사용하면 어떤 원격 저장소를 대상으로 하는지 쉽게 파악할 수 있다.

브랜치 삭제

 브랜치를 삭제하는 주된 이유는 Git 프로젝트를 정리하고 복잡하지 않게 유지하기 위해서이다. 브랜치를 삭제하기 전에 항상 다른 브랜치에 병합했거나 해당 브랜치에서만 찾을 수 있는 작업을 더 이상 사용하지 않을 것이 확실하다고 생각되는 것만 삭제하여야 한다.

참고 : 다른 브랜치의 일부가 아닌 커밋이 있는 브랜치를 삭제할 때 해당 브랜치의 일부인 커밋은 삭제되지 않는다. 커밋은 여전히 커밋 기록에 남아 있지만, 이를 가리키는 간단한 브랜치 참조가 없고 기존 브랜치의 개발 히스토리의 일부가 아니기 때문에 더 이상 쉽게 접근할 수 없다.

 브랜치 삭제가 어떻게 작동하는지 보여주기 위해 친구가 feature 브랜치가 필요하지 않다고 판단하여 제거하려 한다고 가정해 보자. 브랜치를 완전히 삭제하려면 원격 브랜치, 원격 추적 브랜치 및 로컬 브랜치를 모두 삭제해야 한다.

 원격 브랜치와 원격 추적 브랜치를 삭제하려면 git push -d 명령어를 사용한다.(여기서 -d는 "delete"를 의미합니다). 이 명령어를 사용하면 기본적으로 원격 저장소에 삭제를 업로드한다. 원격 브랜치 이름을 함께 입력해야 한다.

 

git push -d <삭제할 원격 브랜치 이름>

 

참고 : 

 호스팅 서비스 웹사이트에서 직접 원격 브랜치를 삭제할 수도 있지만 이렇게 하면 원격 추적 브랜치는 삭제되지 않는다. 로컬 브랜치를 삭제하려면 git branch 명령어와 함께 -d 옵션을 사용하여 삭제하려는 브랜치 이름을 입력한다.

git branch -d <삭제할 로컬 브랜치 이름>

원격 저장소에서 변경사항 통합

 로컬 저장소의 변경 사항을 원격 저장소에 반영하기 위해 명시적인 작업을 수행해야 하는 것처럼 원격 저장소의 변경 사항을 로컬 브랜치 및 원격 추적 브랜치에 반영하기 위해서도 명시적인 작업을 수행해야 한다.

 원격 브랜치의 변경 사항을 로컬 브랜치에 통합하는 것은 두 단계 프로세스로 이루어 진다. 첫 번째 단계는 원격 저장소에서 변경 사항을 페치(fetch)하는 것이고, 두 번째 단계는 로컬 저장소의 로컬 브랜치에 해당 변경 사항을 통합하는 것이다. 


원격 저장소에서 변경 사항 페치(fetch)하기

 Git에서는 원격 저장소에서 로컬 저장소로 데이터를 다운로드하는 프로세스를 페치(fetch) 또는 페칭(fetching)이라고 하며, 이를 위해 사용하는 명령어는 git fetch이다. git fetch 명령어는 로컬 저장소의 모든 원격 추적 브랜치를 업데이트하는 데 필요한 모든 커밋을 다운로드하여 해당 원격 추적 브랜치가 지정된 원격 저장소의 원격 브랜치 상태를 반영하도록 한다. git fetch 명령어에 원격 저장소 약어를 인수로 제공하지 않으면 기본적으로 약어가 origin인 원격 저장소가 사용되며, 현재 브랜치에 대한 업스트림 브랜치가 정의되어 있지 않은 경우에만 해당됩니다.

git fetch [원격 저장소 이름]

 

 git fetch 명령어는 로컬 브랜치에는 영향을 미치지 않고 원격 추적 브랜치에만 영향을 끼친다. 즉, 데이터를 페치(다운로드)만 하며 실제로 데이터를 어떤 로컬 브랜치에도 통합하지 않는다. 따라서 원격 저장소에서 데이터를 페치할 때 작업 디렉토리의 내용은 변경되지 않는다.


로컬 브랜치에 변경 사항 통합하기

 원격 저장소에서 변경 사항을 가져와 로컬 저장소의 원격 추적 브랜치를 업데이트했다면, 이제 로컬 브랜치를 업데이트할 준비가 된 것이다. Git은 변경 사항을 통합하는 두 가지 방법인 병합(merge)과 리베이스(rebase)를 제공한다. 병합을 실행할 때는 병합할 대상 브랜치에 위치해야 한다. 원격 저장소의 main 브랜치에 있는 커밋을 로컬 main 브랜치에 통합하려면 git merge 명령을 사용합니다. 이번에는 원격 추적 브랜치인 origin/main의 이름을 전달한다.


참조

https://www.oreilly.com/library/view/learning-git/9781098133900/

반응형