git으로 협업(브랜치, 충돌해결, pull request)

2021. 3. 24. 02:02 형상관리/Git

 

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 [빨간색코딩]