git으로 협업(브랜치, 충돌해결, pull request)
1. 브랜치로 일하기
현업에서는 이슈를 해결하기위해 이슈마다 브랜치를 딴다. 이렇게 딴 브랜치로 이슈를 해결한 후 master에서 이슈브랜치를 병합하는 것을 Fast-forward 방식이라고 한다. 실제 master 브랜치는 커밋 object가 생성되지 않지만, 포인터를 앞으로 옮긴다. (fast-forward빨리감기라고 함)
별도의 커밋을 갖고있는 master브랜치와 이미 분기된 다른 브랜치와 merge할 때는 fast-forward 방식이 아니다. 이때 git은 공통 조상을 찾고 3way-merge를 이용하여 갈라진 커밋객체를 합치고 새 커밋객체를 만든다.
2. 충돌해결
같은 파일(=A)의 같은 코드를 각자 브랜치(로컬과 원격저장소가 될수도 있다)로 작업(commit)을 하고 merge를 할 때 충돌이 발생할 수 있다. 이 경우 기본적으로 작업 디렉터리에 있는 A에 2개의 브랜치 작업내용이 ===를 기준으로 삽입된다. 병합하려는 사람이 이를 수동으로 해결해야 한다.
충돌이 일어났을 경우, index에는 A파일은 Base파일(공통 조상), 현재브랜치의 A파일, 다른 브랜치의 A파일로 3개가 생긴다. git은 3way-merge를 이용하여 이를 해결한다.
3. kdiff3
설치법: https://github.com/honux77/practice/wiki/kdiff3
명령어
git config --global merge.tool kdiff3 : 연동
git mergetool : 충돌일어난 경우에 이 커맨드 입력
병합이 완료되면 A파일.orig가 발생하는데 백업용이므로 지워도 무관하다.
4. git을 이용한 협업의 규칙들
- commit 전에 반드시 pull을 받아서 코드를 최신으로 유지한다
- 1개의 파일을 2명 이상이 작업하지 않도록 역할을 나눈다
- IDE가 생성하는 설정파일은 올리지 않는다
5. github pull request 흐름
계정A : 원격저장소 소유자
계정B : A의 저장소에 Pull Request를 보내고 싶은 자
계정B : github사이트에서 계정A의 원격저장소를 Fork한다.
계정B : 자신의 계정에 있는 Fork한 원격저장소를 로컬저장소로 clone한다.
계정B : 브랜치를 생성한다.
계정B : 파일을 수정하고 커밋한다.
계정B : push한다.
계정B : github사이트에서 원격저장소의 커밋한 브랜치로 이동하여 확인한다
계정B : github사이트에서 자신의 원격저장소에서 New pull request 버튼을 누른다. base fork와 head fork를 설정한후 create pull request를 한다
계정A : github사이트에서 pull request 요청을 확인하고 수락하거나 기각한다.
출처: https://sjh836.tistory.com/38?category=695128 [빨간색코딩]
'형상관리 > Git' 카테고리의 다른 글
[Git 개념] Git 분석 (0) | 2021.04.01 |
---|---|
상황에 따른 git 명령어 (커밋복구, 파일명변경, 중간에 gitignore설정, 원격브랜치 삭제, merge취소, 인증) (0) | 2021.03.24 |
git object 파헤치기 (0) | 2021.03.24 |
git ignore 추적하지 않는 파일목록 관리 (0) | 2021.03.24 |
git의 원리 (git object를 중심으로) (0) | 2021.03.23 |
GIT의 기본 명령어 (0) | 2021.03.23 |
[Git - Server] 원격 저장소 만들기 (0) | 2021.03.16 |
[Git - Server] 비밀번호 없이 접속이 가능하도록 SSH Key 등록 (0) | 2021.03.16 |