참고 링크
극락이들의 GitHub 협업 가이드 문서입니다.
⇒ 궁금한 점이 있으면 주디()에게 질문해주세요!
[ 목차 ]
0. 극락이들의 협업 규칙
- 브랜치는 main, develop, feature 브랜치만 사용
- feature 브랜치는 이슈 기반으로 인텔리제이를 활용해 생성
- 브랜치간 merge 전략은 다음 규칙을 따름
- develop → main : create a merge commit 옵션 사용
- feature → develop: squash and merge 옵션 사용
- develop → feature: rebase and merge 옵션 사용
- 브랜치 형식 → feature/domain-이슈번호
- feature/diary-1
- 커밋 형식 → Gitmoji 구현한 내용
- ✨ 일기 엔티티 생성
- 이슈 형식 → [Domain] 구현할 내용
- ex) [Diary] 일기 생성 기능 구현
- PR 형식 → Gitmoji [Feature/domain-이슈번호]구현한 내용
- ex) ✨ [Feature/diary-1] 일기 생성 기능 구현
- fix(hotfix)에서 develop으로 merge 할 경우
- Gitmoji [Fix/domain-이슈번호]구현한 내용
- develop에서 main으로 merge 할 경우
- Gitmoji [Develop]구현한 내용
- 이슈에 Assignees, Label, Project, Milestone 필수로 추가
- PR에 Reviewers, Assignees, Label, Project 필수로 추가
이슈와 PR은 템플릿을 활용
- 이슈 템플릿
<!-- Issue 제목은 다음과 같은 형식으로 작성합니다. [domain] title ex) [Diary] 일기 작성 기능 구현 --> ## 📑 작업 사항 <!-- 진행할 작업 목록을 작성해주세요. -->
- PR 템플릿
<!-- PR 제목은 다음과 같은 형식으로 작성합니다. gitmoji [Feature/domain-issue number] title ex) :sparkles: [Feature/diary-1] 일기 작성 기능 구현 PR에 사용되는 Gitmoji 가이드입니다. feat(✨) - Introduce new features fix(🐛) - Fix a bug docs(📝) - Add or update documentation style(🎨) - Improve structure / format of the code refactor(♻️) - Refactor code perf(⚡️) - Improve performance test(✅) - Add or update tests build(👷) - Add or update CI build system ci(💚) - Fix CI Build chore(⚙️) - Other changes revert(⏪️) - Revert changes hotfix(🚑️) - Critical hotfix --> ## 💡 개요 <!-- PR에 대한 설명을 간략하게 작성해주세요. --> - resolved #0 ## 📑 작업 사항 <!-- 진행한 작업에 관한 내용을 작성해주세요. (스크린 샷이 있다면 첨부해주세요) --> ## ✒️ 코드 리뷰 요청 사항 <!-- 리뷰어가 집중해서 봐야 하는 포인트나 궁금한 점을 작성해주세요. --> ## ✔️ 코드 리뷰 반영 사항 <!-- 코드 리뷰에 대한 반영사항을 작성해주세요. (재 PR 시에만 작성합니다) -->
1. 협업을 위한 사전 준비
IntelliJ - Git Tool Box 플러그인 설치 (필수)
- 인텔리제이에서
Git Tool Box
플러그인을 설치합니다. - 깃허브를 사용하실 때 유용한 플러그인이니 설치하시는 것을 추천드려요!

- 설치하시면 다음과 같이 프로젝트 옆에 뜨는 것을 볼 수 있습니다.
- 깃 프로젝트에 대한 정보를 데코레이션을 볼 수 있는 기능입니다.
- 데코레이션은
Settings > Version Control > GitToolBox
에서 커스텀 가능합니다.


IntelliJ - Gitmoji Plus 플러그인 설치 (옵션)
- 인텔리제이에서
Gitmoji Plus
플러그인을 설치합니다. - 깃모지가 익숙하지 않은 사용자를 위해 쉽게 쓸 수 있도록 도와주는 플러그인입니다.
- 플러그인 설치가 싫으신 분들은 Gitmoji 홈페이지를 참고하셔도 됩니다.

- 설치하시면 커밋 창에서 깃모지 아이콘이 생긴 것을 볼 수 있습니다.

- 클릭 후 커밋 상황에 맞는 깃모지를 선택 해주시면 됩니다.
- 검색도 가능해요!!


2. 브랜치 전략
Gitflow 관련 추가 설명 (참고 링크)
Gitflow를 축소시켜 main, develop, feature 브랜치만 사용할 예정입니다. 각 브랜치는 Github의 Issue기반으로 IntelliJ의 Task를 활용하여 생성할 것이고, Issue는 PR과 1대 1로 매칭합니다.

main
릴리즈를 위한 브랜치입니다.
develop
릴리즈 전 릴리즈를 위한 준비가 된 가장 안정적인 브랜치입니다.- 즉,
main
에 merge 전 모든feature
가develop
에 merge 되어야 합니다.
feature
새로운 기능이 추가되어야 할 때 사용되는 브랜치입니다.develop
으로부터 브랜치를 생성 해서 작업 후, 작업이 완료되면develop
에 merge 합니다.
Merge 방식 이해하기 (Merge, Squash, Rebase)
- Merge 방식을 이해해야 깃 크라켄 같은 도구에서 커밋 내역을 볼 때 이해가 쉽고 협업할 때 도움이 될테니까 꼭 이해해주세요!
Branch Merge 전략
- develop → main : create a merge commit 옵션 사용
- 머지 커밋이 남습니다. main 브랜치에는 머지 시점이 필요하니 해당 전략을 사용합니다.
- feature → develop: squash and merge 옵션 사용
- PR의 커밋 로그를 하나로 묶을 수 있습니다. 원자적인 커밋 또는 PR 기능과 전혀 상관 없는 커밋 로그(ex. 콘솔 로그 제거)를 하나로 합쳐서 의미 있는 커밋 로그만 남기는 방식입니다. PR 제목이 커밋 로그가 됩니다!!
- 다만 PR에 커밋이 하나 뿐일 경우에는 커밋이 커밋 로그가 되기 때문에 꼭 PR 제목 형식에 맞게 수정 후 머지해주세요~
- develop → feature: rebase and merge 옵션 사용
- 머지 커밋이 남지 않기 때문에 develop 브랜치를 내 브랜치로 pull할 때 사용해 쓸데 없는 머지 커밋을 남기지 않을 수 있어요!
3. 이슈 기반 브랜치 생성
Github 이슈 생성
- 이슈 기반으로 브랜치를 생성하기 위해서 깃허브에서 이슈를 생성합니다.
- 새로 추가해야 하는 기능, 개선해야 하는 기능, 버그 등 모든 것을 이슈라고 합니다.
- 프로젝트에서 생성할 경우 템플릿 적용이 되지 않으니 이슈에서 생성 후 프로젝트를 연결해주세요!
- 이슈 생성하기
- 이슈 제목 형식은 아래와 같이 작성하려고 합니다.
- [domain] 구현할 내용
- ex) [Diary] 일기 추가 기능 구현
- 본문은 이슈 템플릿을 활용해 작성해주시면 됩니다.
- 이슈에 배정, 라벨, 마일 스톤 추가하기
- 이슈에는
Assignees
,Label
,Milestone
,Project
는 필수로 추가합니다.

IntelliJ Task Server 설정
Settings > Tools > Tasks > Servers
에 들어가서 깃허브 레포를 등록합니다.- 아래 더하기 버튼을 클릭 후 Github를 선택해주세요.

Repository
에 깃허브 유저명 / 레포지토리명을 입력합니다.

Craete API Token
을 클릭 후 토큰을 발생합니다.

TEST
를 눌러 확인 후 이상이 없으면OK
를 누릅니다.

IntelliJ 이슈 기반 브랜치 생성
- 위에서 생성한 이슈에 대한 브랜치를 인텔리제이에서 생성합니다.
- feature 브랜치를 생성한다고 이해해주시면 됩니다.
- 브랜치 생성 형식은 다음과 같습니다.
- feature/domain-이슈번호
- ex) feature/diary-1
- shift를 두 번 클릭 후 open task를 검색합니다. (윈도우 기준 단축키
alt + shift + n
)

- 깃허브와 연관된 이슈 목록 중에서 원하는 이슈를 선택합니다.

- from 이후를
develop
으로 선택 후 브랜치 명을 형식에 맞게 작성 후OK
를 클릭합니다. develop
origin/develop
다 가능합니다!!- 다만
develop
으로 할 경우 최신으로 업데이트 됐는지 확인 후 해주세요~ - 혹시 브랜치명 실수했을 경우는
rename
하셔셔 변경하시면 됩니다.

4. Branch에서 작업 후 PR
IntelliJ Commit & PR
- 브랜치명에 어떤 팀인지에 대한 정보가 있으니 앞으로 커밋 형식은 다음과 같습니다. (커밋 내용은 자유롭게 작성하시면 될 것 같아요)
- 깃모지 구현한 내용
- ex) ✨ 일기 엔티티 생성

- 작업 완료된 브랜치는
develop
에 PR을 날려서squash merge
해주세요! - 깃모지 [Feature/domain-이슈번호] 구현한 내용
- ex) ✨ [Feature/diary-1] 일기 생성 기능 구현
Rwviewers
,Assignees
,Label
,Project
도 추가합니다.- PR 본문에는 키워드와 함께 이슈 넘버(#이슈 번호)를 기재합니다.
- 본문은 PR 템플릿을 활용해 작성해주시면 됩니다.
- merge 시 자동으로 이슈가 close 됩니다.
- 스쿼시 머지 시 커밋이 1개일 경우 제목이 PR 제목으로 반영 안되니 확인해주신 후 merge 해주세요!!
이슈 종료 키워드
- close - closes - closed - fix - fixes - fixed - resolve - resolves - resolved


- 성공적으로 PR이 merge되고 이슈가 닫혔습니다.
- 머지된 브랜치는 리모트에서는 자동 삭제됩니다.



작업 중 develop 내용 가져오기
develop
에서 새 브랜치를 만들어서 작업 중 다른 브랜치에서 작업 내용이develop
에 merge 된 상황- 현재 브랜치 -
c/user-4
- 이때 인텔리제이에서는 이렇게 보입니다.


develop
의 내용을c/user-4
로 가져오려면 아래 그림처럼develop
을 우클릭 후 rebase를 선택합니다.- 충돌이 없을 경우 바로 rebase가 적용되서 합쳐지는 것을 볼 수 있어요!
충돌이 있는 경우 충돌을 해결하라는 안내가 뜨는데 충돌을 해결하면 됩니다.



- 이렇게 하고 나서 PR을 날리면 깔끔하게 커밋을 유지하면서
develop
의 최신 내용을 반영할 수 있습니다!!
