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 한 결과
- push 한 결과 first 폴더에는 remote 의 버전이 local의 버전보다 앞서는 걸 볼 수 있다.
- pull 하고 나면 다음과 같이 버전이 같아진다.
- 두 번째 폴더의 test 파일에 문구를 추가한다.
- commit => push하고나서 첫번째 폴더에서 pull로 가져온다.
- pull 하고 나면 첫 번째 폴더에도 위에서 추가한 문구가 추가된 걸 볼 수 있다.
- checkout
- check out 결과
7.3 branch (브랜치)
branch란?
- 나뭇가지를 의미한다.
- 기존에 만들어놓은 버전에서 복사해서 새로운 가지를 만들어 다른 방향으로 작업을 이어 나가는 것을 말한다.
- 처음에 생긴 브랜치는 "main"이라는 이름이 붙는다.
- 새 브랜치를 만들 때, "새 브랜치 체크아웃" 옵션 : 브랜치를 만들되 새로 만든 브랜치의 소스로 내 working directory 상태를 체크아웃한다는 의미이다.
- "새 브랜치 체크아웃" 옵션을 체크하지 않으면 기존에 체크아웃된 브랜치에 HEAD를 유지한 채로 만든다.
- 이 상태에서 커밋하면 새 브랜치가 아닌 기존의 브랜치에 커밋이 된다.
- 브랜치 생성 후 커밋과 푸시
Ex) 브랜치 실습
- 현재 상태
- 새 브랜치를 생성한다.
- 커밋
- 아래와 같이 푸시한다.
- 그럼 다음과 같이 origin 원격 저장소가 생긴 걸 볼 수 있다.
- 원격 탭에도 bug_fix 브랜치가 생긴다.
- 다른 브랜치로도 체크아웃을 할 수 있다. 브랜치끼리의 헤드를 옮겨가는 것이다.
- 매인에 체크아웃
- bug_fix에 체크아웃
- 가장 왼쪽에 일자로 된 그래프가 현재 어느 브랜치에 체크아웃된 상태인지 나타낸다.
- 다음과 같이 수정한다.
- 첫 번째 폴더를 커밋한다.
- 커밋하고 나면 로컬만 한 단계 올라간다.
- 푸시해서 원격도 올려준다.
- 푸시 결과
- 체크아웃하면 아래와 같이 시점에 맞춰 내 소스도 변경된다.
- 이전에 pull = fetch + merge라고 살펴봤다
- 그런데 merge는 꼭 pull 할 때만 쓰이는게 아니다.
- 다른 브랜치끼리 합칠 때도 merge라고 한다.
7.4 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/
'컴퓨터 과학 > [zerobase] Git & GItHub' 카테고리의 다른 글
Chapter 06. 저장소(repository) (0) | 2022.10.05 |
---|---|
Chaper 05. Git 기본 동작 원리 (0) | 2022.10.05 |
Chapter 04. Git SetUp (0) | 2022.10.05 |
Chapter 01. Git 정의, Git 설치 방법 ~ Chapter 03. Git 준비하기 (1) | 2022.10.05 |
Chapter 10. README (1) | 2022.10.05 |