* 협업하면서 직접 해보면서 익힌 방법이라 정도가 아닐 수 있음. 기억 안 날 때 참고하기 위한 기록용
프로젝트를 하면 정식으로 반영하는 main branch, 개발하면서 메인에 올리기 전에 테스트하는 test branch 를 사용한다.
개발 중에는 test branch 에서 작업자마다 자신의 브랜치를 만들어 작업하고, 다른 작업자와 코드를 병합하며 충돌이 있을 경우 해결한다. 그런데 병합을 하다가 순서를 잘못 설정하면 detination 코드에 현재 작업한 source 코드를 올려야 하는데, source 코드에 destination 코드가 올라간다든지 해서 작업물이 잡아먹히거나 없어지는 등의 대참사가 일어나기도 한다.
Bitbucket에서 협업 작업을 하면 pull request를 이용해 그런 일을 조금이나마 방지할 수 있다.
충돌이 없을 때 병합
1. source 브랜치에 코드를 스테이지에 올리고 커밋/푸시 한다.
2. 코드와 연동해둔 Bitbucket 의 저장소 페이지로 가서 상단의 Create > pull request 를 누른다.
3. source 브랜치에서 destination 브랜치로 pull request를 날린다.
- 커밋하면서 작성했던 설명 첫줄이 Title이 되고, 그 밑줄부터는 Description에 들어간다. 이 페이지에서 내용 추가해도 됨.
- Add reviewers에 협업자를 넣으면 그 사람이 approve를 해줘야 Merge가 가능하다.
- reviewer 를 추가하지 않으면 나 혼자 코드 변경사항을 확인하고 merge 할 수 있다.
- delete branch 에 체크할 경우 merge 후 브랜치를 자동으로 삭제한다. (개인 브랜치일 때만 체크해보자)
하단에 Create pull request 를 누르면 pull request가 생성된다. 그 하단에서는 코드 변동사항(Diff)과 커밋내용, 커밋코드(Commits) 등을 확인할 수 있다.
4. Merge를 통해 코드를 병합한다.
이 때 충돌이 있으면 bitbucket에서 충돌을 해결해야 한다고 뜨면서 Merge가 활성화되지 않는다. 이 경우의 해결방법은 아래 '충돌이 있는 병합'에 적어두었다.
위처럼 Source와 Destination을 확실히 정해주기 때문에 실수할 일이 거의 없다.
Merge 시 다음과 같이 뜬다.
이렇게 Merge를 하고 Sourcetree에 가서 패치를 해보면 병합이 되어있다.
그런데 보다시피 작업하던 Source 브랜치가 Destination 브랜치보다 하나 뒤에 있다.
이런 상태에서 source 브랜치에서 작업을 하고 병합하면 뭔가 귀찮아졌던 것 같다. destination 브랜치에는 병합돼서 적용이 된 사항이 source 브랜치에서는 적용이 안돼있다든가 하는...
그래서 나는 sourcetree에서도 한번 더 병합을 해주는 편이다.
5. source 브랜치의 최신 작업이 선택된 상태에서 병합을 누르고 destination 브랜치를 선택해 병합해준다.
새로운 푸시가 생기고 테스트 브랜치가 메인 브랜치를 따라잡았다. 메인 브랜치에서 변경했던 내역들을 테스트 브랜치에도 반영하기 위한 작업으로 생각하면 될 듯.
반영할 브랜치, 즉 왼쪽에서 푸시 표시가 생긴 브랜치(여기서는 테스트 브랜치)만 선택해 푸시해주자.
이러면 매번 브랜치를 생성/삭제할 필요없이 작업하던 브랜치에서 계속 작업할 수 있다.
충돌이 있을 때 병합
(일부러 충돌내기 좀 그렇기도 하고 해결방법도 간단해서 글 위주로 작성)
이 경우 Bitbucket을 사용하지 않고 그냥 Sourcetree에서 해결하는 방식을 설명하겠다.
1. Destination 브랜치를 더블클릭해 선택한다.
브랜치 란에 destination 브랜치가 있다면 더블클릭하고, 없다면 아래의 원격 란에서 더블클릭해 체크아웃해올 수 있다.
(위의 캡처는 이미 destination 브랜치를 체크아웃해와서 브랜치란에 들어가 있는 상태이다)
2. Destination 브랜치의 최신 작업을 선택한 상태에서 병합 버튼을 누르고, 반영하려는 Source 브랜치의 최신 작업을 선택해서 병합한다.
3. 충돌이 있다며 해결해야 된다고 뜨면 ! 표시가 있는 파일에서 충돌을 해결한다.
- Current Change와 Incoming Change를 선택할 수 있는데, 현재 Destination 브랜치가 선택된 상태이므로 current는 destintation, incoming은 source의 코드가 된다.
=> incoming change를 선택하면 source 코드를 destination 코드에 반영할 수 있다.
4. 커밋하면 충돌을 해결했다는 내용으로 커밋이 올라가 병합이 반영된다.
- 끝 -
'기타' 카테고리의 다른 글
SQL과 NoSQL의 차이, 장단점 (0) | 2022.06.23 |
---|---|
websocket과 socket.io 의 차이 (0) | 2022.06.22 |
Cognito 참고 자료 (0) | 2022.04.26 |
[Sourcetree] github 토큰 인증 로그인 방법 : sourcetree Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. (0) | 2021.08.19 |
블로그 개설 (2) | 2021.01.05 |