전에 배운 commit, 원격repo, .gitignore를 알았다면, 이제 협업하는 방법을 알아보자
Issue
누가 이 작업 할겁니까? => Issue 할당
ex. 누가 로그인페이지 버튼부분 수정 할겁니까? => Login page button issue 할당
1단계. 누가 이 작업을 진행할 것인지 정한다. - Issue
2단계. 각자 맡은 것에 대해 작업한다. - Branch
3단계. 각자 작업을 프로젝트에 합친다. - merge (경우에 따라). 작업한 내용을 리뷰하고 최종적으로 프로젝트에 반영한다. - PR 후 merge
프로젝트에서 issue는 프로젝트에서 해결해야하는 문제로 아래같은 것이 있다.
버그(프로그램이 원하는 대로 동작하지 않는 것)를 신고(Bug report, 버그 리포트)
기능 추가 등의 프로젝트 개선 제안 (enhancement)
문제들을 해결하기 위한 작업 단위
개발자들은 이러헥 이슈라는 말을 사용한다.
"회원 가입 기능에서 버그있네요. 이슈 등록해둘게요."
"여기 버튼을 더 눈에 잘 보이게 고치면 좋겠네요 이슈 등록해둘게요."
"6번 이슈 제가 처리할게요. 제 앞으로 할당해두겠습니다."
Github 외에도 많이 쓰이는 이슈 관리를 할 수 있는 도구는 Jira, Trello, YouTrack 등이 있다.
이런 도구를 이슈를 추적(tracking)하면서 관리할 수 있다고 해서 이슈 트래커(issue tracker) 또는 이슈 추적도구(Issue Tracking Tool, 이슈 트래킹 툴) 라고 부른다.
Issue 만들기 - 실습
#1로 이슈의 번호라고 한다.
앞으로 작업할 때 issue 번호를 정보로 사용할 것.
코멘트를 달았더니 위 알겠습니다가 업데이트 되었다.
close Issue를 누르니까 아래 그림처럼 이슈가 종료되었다.
다시 Reopen 하니까 다시 열렸다.
메모장을 켜서 Jjigae.txt의 2번을 변경해주고
issue를 나에게 할당한 후 내가 변경한 Jjigae.txt을 김치찌개 육수 요리법 #2 로 commit을 하고 push 해주면
이와 같이 나타난다.
그다음 close the Issue 해줬다.
Branch
각자 작업할 수 있는 공간을 만들기 위해 branch를 사용한다.
branch를 사용하게 되면 나뭇가지가 뻗어나오듯 기능에 맞게 나누어 작업 할 수 있다.
예시로 보자
1번 예시
김르탄씨가 김치국 요리법을 작성하고, 스선장이 김치찜 요리법을 작성하고 있다고 해보자
게다가 내 작업만 열심히 commit 하는 게 아니라 다른 부분도 신경을 써주어야한다.
두 사람이 같은 파일을 작업하면 충돌이 나서 더 이상 작업하기 힘들 수도 있겠다.
서로가 작업한 commit 내역을 내 로컬 repo에도 틈틈이 반영해주어야한다.
아래 commit history 를 보니, 김치국 요리법과 김치찜 요리법 작업 내역이 섞여 있어서
각 작업이 어떻게 진행되고 있는지 좀 보기가 어렵다.
2번 예시
작업 목적에 따라 김치국 branch, 김치찜 branch 를 만들어서 관련된 작업만 하고, 나중에 하나로 합치면 되겠죠!
직접 실습을 하면서 브랜치를 나누고 어떻게 이런 작업이 가능한지 설명하겠다.
앞으로 우리는 기능별로 브랜치를 만들어 작업해야겠다.
Branch 실습
우선 Issue 부터 만들어 할당하고
브랜치를 만들어보자
마지막 commit에서 우클릭 후 브랜치를 선택
feature/이슈번호_관리쉬운이름 형식으로 만들어주기
내가 아까 원격 repo github 페이지에 만들었던 이슈번호에 따라서 숫자가 달라질 수 있다.
브랜치 생성!
해당 브랜치가 생성되었다.
sourcetree에서는 브랜치명 안에 /를 적어주면 마치 폴더처럼 보여준다.
앞으로 하는 commit은 방금 만든 브랜치인 feature/2_jjigae 에만 반영된다.
현재 작업하는 브랜치를 선택하는 것을 체크아웃(checkout) 이라고 한다.
sourcetree 에서는 체크아웃된 브랜치, 즉 현재 작업 브랜치를 브랜치명 왼쪽에 O 표시가 되어있다.
해당 commit 에 붙어있는 파란색 이름표는 브랜치명이다.
해당 브랜치의 최신 commit 에 이름표를 붙여 줍니다. 각 이름표는 아래와 같은 뜻을 가지고 있다.
main : 로컬 repo의 main 브랜치
feature/2_jjigae : 로컬 repo의 feature/2_jjigae 브랜치
origin/main : origin(연결시켜준 원격 repo)의 main 브랜치
origin/HEAD : 현재 작업중인 commit. origin(연결시켜준 원격 repo)의 최신 commit
현재 브랜치들을 그림으로 보면 아래와 같다.
새로운 브랜치가 갈라져 나왔다.
새로 생긴 브랜치의 시작점은 기본적으로 갈라져나온 브랜치(여기서는 main)의 최신 commit 부터이다.
브랜치에 commit 하기
Branch 정리
첫번째 commit 해주기
두부 김치찌개로 요리법을 업데이트하고 commit 해보자
jjigae.txt 를 아래처럼 바꿔주자
4번 5번을 수정하였다.
커밋 해주자.
commit 의 상태를 히스토리에서 확인 해 보겠다.
최신 커밋에 feature/2_jjigae 이름표만 붙어 있다.
브랜치가 갈라져나왔기 때문에 main 브랜치의 최신 commit 은 '김치찌개 요리법 업데이트'이다.
지금 브랜치의 상태를 그림으로 보면 아래와 같다.
두번째 커밋하기 (commit 한번 더 하기)
jjigae.txt 파일의 4번을 수정해주자.
커밋 완료!
commit 의 상태를 히스토리에서 확인 해 보겠다.
최신 커밋에 feature/2_jjigae 이름표만 붙어 있다.
브랜치가 갈라져나왔기 때문에 main 브랜치의 최신 commit 은 '김치찌개 요리법 업데이트'이다.
해당 브랜치의 상태를 그림으로 보면 아래와 같다.
Branch 삭제
브랜치를 삭제한다는 것은 그동안 브랜치에 했던 작업 내역 즉, commit 이 모두가 사라진다는 의미.
브랜치를 삭제하면 기본 브랜치인 main 브랜치로 체크아웃(checkout) 즉 작업 브랜치가 변경된다.
작업 브랜치가 변경되면 파일의 상태도 당연히 해당 브랜치의 마지막 commit 으로 상태로 변경된다.
feature/2_jjigae 는 앞으로 실습에도 계속 사용할 것이므로 임시로 브랜치를 하나 만들고 삭제해보자.
그리고 브랜치 작업이 꼬이거나 잘 되지 않을 때 참고하자.
브랜치 삭제하기
삭제할 브랜치는 체크아웃(현재 작업 중인) 브랜치가 아니어야한다.
다른 브랜치 이름을 더블 클릭해서 다른 브랜치로 체크아웃.
여기서는 main 브랜치로 체크아웃.
더블 클릭
해당 브랜치 항목을 보니 잘 삭제되었다.
Merge & Conflict
Merge(병합) 는 브랜치를 다른 브랜치에 합치는 것.
즉, 특정 브랜치의 commit 들을 다른 브랜치의 commit 내역에 모두 반영하는 것.
기본적인 설정은 해당 브랜치의 모든 commit 을 모두 다 반영한다고 생각하면 된다.
브랜치 만들기 예시의 바로 빨간 네모 부분입니다! 작업내역을 합쳐보자.
프로젝트마다 Branch 관리하는 방법이 조금씩 다르다.
commit하고 작업하는 방법을 통틀어 flow(흐름) 라고 한다.
대표적으로 github-flow, gitlab-flow, git-flow 가 있다.
웹 프로젝트 개발의 경우 github-flow 를 많이 사용합니다. 우리가 실습하는 방식은 github-flow 와 유사.
각 flow 에 대한 소개는 위 코드스니펫 git 사용 flow 를 참고해보자.
Merge 실습
작업한 feature/2_jjigae 를 main 브랜치에 합치겠다.
commit 을 반영시킬 브랜치인 main 으로 체크아웃.
빨간색 main 더블 클릭
병합 클릭
브랜치 상태를 그림으로 나타내면 아래와 같다.
이제 feature/2_jjigae 작업이 끝났으니 브랜치를 삭제하겠다.
브랜치 이름에서 우클릭 - 2_jjigae 를 눌러서 삭제해주자.
여러 브랜치에 commit 하고 Merge 하기 실습
이번에는 여러 브랜치를 만들어 작업하고 merge 하는 실습을 해보겠습니다.
실제 협업한다면 여러 작업자가 있을 테니 아래처럼 여러 브랜치에서 작업을 하고 나중에 합치는 경우가 많이 발생
브랜치 하나를 삭제하는 원리는 같다.
단, 각 브랜치는 다른 파일을 변경. 다른 브랜치에서 같은 파일을 변경할 때 merge 하는 경우는 곧 아래에서 배울거다.
김치전 요리법을 업데이트 작업은 feature/jeon 브랜치에,
김치볶음밥 요리법 업데이트 작업은 feature/rice 브랜치에 하겠습니다.
실제 상황과 비슷하게 브랜치의 모든 작업을 완료한 후에 한 번에 merge 해볼게요!
작업할 내용을 그림으로 나타내면 아래와 같습니다.
1. 작업 브랜치 두 개 만들기
히스토리 탭을 선택하고, main 브랜치로 체크아웃된 해주세요.
왼쪽 브랜치에서 main 이름을 더블클릭하면 main 브랜치로 체크아웃 됩니다.
파란색으로 main 이름표가 붙은 최신 commit 을 선택하고 우클릭하세요.
2. feature/rice 브랜치에 김치볶음밥 요리법 commit 하기
브랜치 - rice 를 더블클릭해서 feature/rice 브랜치로 체크아웃합니다.
상단 파인더에서 보기를 눌러서 프로젝트 폴더를 Finder (windows는 탐색기) 로 띄웁니다.
fried-rice.txt 파일을 열어서 아래처럼 수정 후 commit 하기
4번을 수정해줬다.
3. feature/jeon 브랜치에 김치전 요리법을 업데이트 commit 하기
브랜치 - jeon 를 더블클릭해서 feature/jeon 브랜치로 체크아웃합니다.
상단 파인더에서 보기를 눌러서 프로젝트 폴더를 Finder (windows는 탐색기) 로 띄웁니다.
다하면 아래와 같은 사진처럼 출력될거다.
feature/jeon 브랜치 먼저 merge 하겠습니다.
상단 병합 을 눌러서 뜨는 창에서 feature/jeon 파란색 이름표가 붙은 commit 을 선택하고 하단 옵션대로 추가한 후 확인 버튼을 누릅니다.
Merge 정리와 꿀팁
Merge 개념과 준비
Merge conflict 실습
Merge conflict 정리
원격 repo & Branch
원격 repo 와 Branch 개념과 실습
원격 repo 와 Branch 정리와 꿀팁
'📁 𝐭𝐨𝐨𝐥&𝐯𝐢𝐫𝐭𝐮𝐚𝐥𝐌𝐚𝐜𝐡𝐢𝐧𝐞 > Git & GitHub' 카테고리의 다른 글
[git] useful git delete / recover commands on cli environment (0) | 2024.06.02 |
---|---|
[git] useful git commands on cli environment (0) | 2024.06.02 |
GitHub Repository에 내 파일 push 하는 방법 (0) | 2023.02.19 |
[Git & GitHub] commit, 원격 repo, .gitignore (3) | 2023.01.13 |