컴퓨터 과학/[zerobase] Git & GItHub

Chapter 07. Git 사용하기

계란💕 2022. 10. 6. 01:46

7.1  clone

  • clone: 로컬에서 작업하기 위해 remote repository를 복제해서 내 PC에 local repository로 저장한다.
  • ssh를 선택한다. https 방식은 보안상 취약하다.
    • ssh 방식은 클론 받을 컴퓨터가 이 프로젝트에 대해 접근할 수 있는 권한을 가지고 있는지  체크한다. 

 

 

 

7.2 add, commit, push, pull

 


기본 용어

  • origin: 원격(깃허브 저장소)에 있는 코드 자체를 의미한다.
  • head: 내가 작업 중인 로컬 브랜치
  • add: working directory에서 staging area로 등록한다.
  • commit: staging area에서 local 저장소에 등록한다.
  • commit message: commit 할 때 등록하는 메모
  • push: local 저장소에서 저장된 파일들을 원격 저장소에 저장
  • fetch: 원격 저장소의 변경된 파일들을 로컬 저장소로 전달한다.
  • merge: 로컬 저장소의 변경 사항들을 working directory로 가져온다.
  • branch(브랜치): 독립적으로 어떤 작업을 따로 진행하기 위한 가지
    • 가지를 치듯이 따로 작업하기 위해서 분기를 만들어준다.
  • checkout: 사용할 다른 브랜치를 지정한다. (어떤 시점이나 버전으로 옮기는 방법, head가 checkout하는 부분으로 시점(head - 작업 중인 로컬 브랜치)을 옮겨진다.)
  • pull: 원격 저장소의 변경 사랑을 로컬 저장소로 가져옴과 동시에 내 작업 소스에 합친다. 
    • pull = fetch + merge
    • merge: fetch해온 로컬 저장소의 소스를 내 작업 소스에 합친다. 합칠 때, 같은 부분의 소스가 다르면 충돌(conflict)이 발생한다.
    • 원격의 버전이 로컬 보다 높은 경우, pull로 땡겨온다.

 

 

 

  Ex)  commit, push, pull 테스트

  • 폴더를 두 개 만든다.
  • 그래프의 파란 줄은 커밋하면 파란색이다. 
  • local의 버전이 더 높으니까 push 해서 remiot

첫 번째 폴더

 

 

두 번째 폴더

 

  • 두 번째 폴더를 보면 local의 버전이 더 높으니까 push 해서 remote에 반영해야한다.
  • push 한 결과

sec 폴더

 

  • push 한 결과 first 폴더에는 remote 의 버전이 local의 버전보다 앞서는 걸 볼 수 있다.
  •  

first 폴더

 

  • pull 하고 나면 다음과 같이 버전이 같아진다.

 

 

  • 두 번째 폴더의 test 파일에 문구를 추가한다.
    • commit => push하고나서 첫번째 폴더에서 pull로 가져온다.

 

  • pull 하고 나면 첫 번째 폴더에도 위에서 추가한 문구가 추가된 걸 볼 수 있다.

 

 

  • checkout

 

 

  • check out 결과

 

 

체크 아웃 후, 1번 폴더를 보면 체크아웃 시점으로 돌아간다. 즉, 이후 커밋 내역인 "나는 다른 사람이야"가 없어지고 이전으로 돌아간다.

 

 

 

7.3 branch (브랜치)

 

 

branch란?

  • 나뭇가지를 의미한다.
  • 기존에 만들어놓은 버전에서 복사해서 새로운 가지를 만들어 다른 방향으로 작업을 이어 나가는 것을 말한다.
  • 처음에 생긴 브랜치는 "main"이라는 이름이 붙는다.
  • 새 브랜치를 만들 때, "새 브랜치 체크아웃" 옵션 : 브랜치를 만들되 새로 만든 브랜치의 소스로 내 working directory 상태를 체크아웃한다는 의미이다.
    • "새 브랜치 체크아웃" 옵션을 체크하지 않으면 기존에 체크아웃된 브랜치에 HEAD를 유지한 채로 만든다.
    • 이 상태에서 커밋하면 새 브랜치가 아닌 기존의 브랜치에 커밋이 된다.

 

  • 브랜치 생성 후 커밋과 푸시

 

 

 

  Ex) 브랜치 실습

 

  • 현재 상태

 

  • 새 브랜치를 생성한다.

 

 

  • 커밋

 

 

 

 

 

  • 아래와 같이 푸시한다.

 

  • 그럼 다음과 같이 origin 원격 저장소가 생긴 걸 볼 수 있다.
    • 원격 탭에도 bug_fix 브랜치가 생긴다.

 

  • 다른 브랜치로도 체크아웃을 할 수 있다. 브랜치끼리의 헤드를 옮겨가는 것이다.

 

  • 매인에 체크아웃

 

  • bug_fix에 체크아웃
    • 가장 왼쪽에 일자로 된 그래프가 현재 어느 브랜치에 체크아웃된 상태인지 나타낸다.
    •  

 

 

 

  • 다음과 같이 수정한다.

 

 

 

  • 첫 번째 폴더를 커밋한다.
    • 커밋하고 나면 로컬만 한 단계 올라간다.
    • 푸시해서 원격도 올려준다.

 

 

  • 푸시 결과

 

 

 

  • 체크아웃하면 아래와 같이 시점에 맞춰 내 소스도 변경된다.

버그 픽스로 체크아웃

 

메인으로 체크아웃

 

  • 이전에 pull = fetch + merge라고 살펴봤다
    • 그런데 merge는 꼭 pull 할 때만 쓰이는게 아니다.
    • 다른 브랜치끼리 합칠 때도 merge라고 한다.

 

 

 

 

7.4 merge (병합)

 

 

merge

  • merge: 각각의 브랜치에서 작업이 완료된 후, 통합 브랜치(main)로 모아 합치는 작업을 말한다.
  • 시점을 선택해서 merge도 가능하다.
  • 반드시 최신 시점의 커밋에서 merge 할 필요는 없다.

 

 

  Ex) 브랜치 실습

  • 매인에서 새로운 브랜치 new_feature를 하나 만든다.
  • new_feature 상태로 체크아웃

 

 

 

  • 커밋하고 new_feature에 푸시한다.

 

 

 

  • 푸시한 결과

 

  • 현재 메인 브랜치 상태

 

  • 메인 브랜치에서의 파일을 수정

 

 

  • 메인 브랜치 푸시까지 한다.

 

 

 

  • merge 이전

 

  • merge 후 화면
    • new _feature를 main으로 merge한다.
    • 현재 로컬에서만 merge한 상태이다.
    • 따라서

 

  • main 브랜치를 푸시한다.

 

 

 

7.5  conflict

 

conflict (충돌)

  • 여러 branch를 merge할 때 발생할 수 있다. 
  • 같은 파일의 같은 부분을 수정한 브랜치들을 merge할 때 conflict가 발생한다.

 

 

   Ex) conflict

  • new_feature

 

 

  • 커밋하고 푸시까지 한다.

 

  • 커밋이랑 푸시를 추가한다.

 

  • 현재 main 브랜치 상황

 

  • main 브랜치에서 다음과 같이 수정한다.

 

 

 

 

7.6  fork(복제)

 

fork란 무엇인가?

  • fork: 다른 사람의 원격 저장소에서 어떤 부분을 수정하거나 추가 기능을 넣고 싶을 때 해당 원격 저장소를 내 원격 저장소에 그대로 복제하는 것을 포크 뜬다고 한다.
    • fork: 남의 remote repository => 나의 remote repository 
    • clone: 나의remote repository => 나의 local repository

 

 

 

7.7 pull request

 

pull request

  • pull request: 다른 사람에게 내 브랜치를 merge해달라고 하는 요청
    • ex) 한 원격 저장소에서 내 브랜치를 merge 하기 전에 피드백을 요청한다.
    • fork 뜬 저장소에서 원본 저장소에 개발 완료한 다음 원본 저장소에 merge를 요청한다.
  • 다른 브랜치에서 push한 다음에 원격 저장소에 적용한다.
  • push하고 나면 자동으로 pull request 버튼이 뜬다.

 

 

 

  Ex) pull request

  • 다음과 같이 추가한다. new_feature 브랜치

 

 

  • 아래와 같이 pull request 버튼이 생긴다.

 

 

 

 

 

출처 - 제로베이스 백엔드 스쿨 https://zero-base.co.kr/

 

제로베이스 - 누구나 취업하는 가장 합리적인 취업 스쿨

코딩 부트 캠프 개발자, 데이터 사이언티스트, 마케터, PM, 디자이너 등 제대로 공부하고 확실하게 취업하세요. 당신의 삶의 전환점이 될 제로베이스 스쿨입니다.

zero-base.co.kr