[Git] Ch.3 둘 이상의 원격 저장소로 협업하기

Hwichan Ji·2021년 3월 12일
0

Git

목록 보기
4/8
post-thumbnail

팀 개발을 위한 Git, GitHub 시작하기(정호영, 진유림 지음)으로 공부한 내용을 정리한 글입니다.

원본저장소 복사

  • 기본적으로 원본저장소에 커밋을 직접 push하는 것은 그 저장소를 만든 사람만 할 수 있음
  • 다른 사람이 push하기 위해선 저장소 소유자가 그 사람을 협력자로 등록해야 함
  • 협력자가 늘어날 수록 원본저장소를 관리하기가 어려워짐

fork

  • 협력자를 추가하는 대신, 원본저장소를 fork로 다른 원격저장소에 복사하고 추가로 코드를 작성한 뒤, pull request를 통해 원본저장소에 반영하는 방식을 사용
  • forkbranch를 포함한 원본 저장소의 모든 커밋을 복사함
  • branch를 통해 코드 분기점을 만들고 pull request를 통해 병합하는 과정과 유사하지만 fork한 원격저장소는 branch와는 달리 원본 저장소로부터 독립되어 동작함
  • fork한 원격저장소는 clone으로 로컬저장소에 내려받은 뒤 작업을 함

원본저장소에 Pull Request

  • fork한 원격저장소의 한 branch를 원본저장소의 한 branch에 병합하는 작업
  • 오픈소스에 pull reqeust를 보내기 전에 Contribution Guideline이 있는지 확인하는 것이 좋음
  • pull request가 받아들여지면 fork한 사용자가 원본저장소에 Contributor로 등록됨

Commit 이력 조작하기

  • fork한 원격저장소는 fork한 시점의 원본저장소 커밋 이력을 복사함
  • 이후 원본저장소에 새로운 커밋이 생겨도 fork한 원격저장소는 해당 커밋에 대해 알지 못 함
  • 이러한 상황에서 pull request를 한다면 Conflict이 발생할 수 있음
  • 병합시 Conflict을 해결한 커밋이 추가로 생성됨

여러 원격저장소 추적

  • fork한 원격저장소를 내려받은 로컬저장소는 fork한 원격저장소를 origin이라는 이름을 붙이고 추적함
  • 로컬저장소에서 원본저장소의 히스토리를 보기 위해선 원본저장소도 추적해야 함
  • $ git add remote upstream [원본저장소 주소]: 원본저장소는 관용적으로 upstream이라는 이름을 붙임

fetch

fetch_pull

  • 원격저장소의 커밋 이력을 가져와 로컬저장소의 커밋 이력을 업데이트하는 기능
  • 커밋 이력을 가져와 최신 코드를 내 코드에 반영하는 pull과는 달리 커밋 이력만 가져옴

rebase

rebase

  • 커밋의 base commit을 바꾸는 기능
  • 위 예시에서 1, 2번 커밋의 base를 0번 커밋에서 4번 커밋으로 바꾸는 과정
    1) 1번 커밋과 4번 커밋을 비교하여 충돌을 확인하고 해결
    2) 충돌을 해결한 1번 커밋을 4번 커밋과 연결
    3) 1'번 커밋과 2번 커밋을 비교하여 충돌을 확인하고 해결
    4) 충돌을 해결한 2번 커밋을 1'번 커밋과 연결
  • 커밋 히스토리를 바꾸는 것이기 때문에 히스토리가 꼬이지 않도록 혼자 쓰는 branch에서 rebase해야 함
  • rebase한 커밋 이력을 원격저장소에 반영할 경우 force push로 강제 푸쉬해야 함
profile
안드로이드 개발자를 꿈꾸는 사람

0개의 댓글