[수업 목표]
다른 로컬 리포에서 같은 파일 푸시했을 때 충돌남.
그러면 깃이 어떤거 선택할건지 물어봄.
이런 경우 적용할 수 있는 해결 방식
1. 누가 이 작업 할 것인지 정한다. (issue)
2. 각자 맡은 것을 작업한다. (branch)
3. 각자 작업을 프로젝트에 합칠 수 있게 공유한다. (merge)
(경우에따라 4.) 작업한 내용을 리뷰하고 최종적으로 프로젝트에 반영한다. (PR 후 merge)
- 프로젝트에서 issue(이슈)는 프로젝트에서 해결해야하는 문제로 아래같은 것이 있어요.
- 버그(프로그램이 원하는 대로 동작하지 않는 것)를 신고 (Bug report, 버그 리포트)
- 기능 추가 등의 프로젝트 개선 제안 (enhancement)
- 위 문제들을 해결하기 위한 작업단위
Github 공식 이슈 관리 소개 >
Github을 활용한 이슈관리 블로그 글 >
기능 별로 잘 보이게 하기 위해서 사용
기능에 맞게, 목적에 맞게 나눠 사용
우리는 그동안 commit 을 main 이라는 이름을 가진 브랜치에 해주었습니다.
프로젝트마다 기본 브랜치가 설정되어있답니다. 우리 프로젝트의 경우 main 브랜치가 기본 브랜치였기 때문에 따로 설정을 해주지 않아도 자동으로 main 브랜치에 commit 이 된 거에요.
작업 목적에 따라 김치국 branch, 김치찜 branch 를 만들어서 관련된 작업만 하고, 나중에 하나로 합치면 되겠죠!
작업할 브랜치 선택하는 것 = 체크아웃 이라고 함
커밋할 때 브랜치 어디로 체크아웃되어있는지 확인하고 커밋해야함
브랜치 태그 붙어있는 커밋 : 그 브랜치 내 최신 커밋임 표시
브랜치를 삭제한다는 것은 그동안 브랜치에 했던 작업 내역 즉, commit 이 모두가 사라진다는 의미
머지가 머죠 ...? (진심 이해못했음 개그라고 직접말하시기전까지)
Merge(병합) 는 브랜치를 다른 브랜치에 합치는 것입니다. 즉, 특정 브랜치의 commit 들을 다른 브랜치의 commit 내역에 모두 반영하는 것입니다. 기본적인 설정은 해당 브랜치의 모든 commit 을 모두 다 반영한다고 생각하면 됩니다.
프로젝트마다 Branch 관리하는 방법이 조금씩 다릅니다. commit하고 작업하는 방법을 통틀어 flow(흐름) 라고 합니다. 대표적으로 github-flow, gitlab-flow, git-flow 가 있습니다.
ㅡ
웹 프로젝트 개발의 경우 github-flow 를 많이 사용합니다. 우리가 실습하는 방식은 github-flow 와 유사합니다.
각 flow 에 대한 소개는 위 코드스니펫 git 사용 flow 를 참고해보세요.
GitHub Flow 공식 가이드 >
Git 사용 Flow 블로그 글 >
여러 브랜치에 커밋하고 머지하기
빠른 실습을 위해 issue 를 만들어 할당하는 작업은 하지 않겠습니다. 실제 프로젝트에서는 언제나 issue 먼저 만들고 논의 -할당한 후에 작업을 한다는 것을 잊지 마세요!
김치전 커밋 먼저 머지하고, 볶음밥 커밋 머지함.
git tutorial
)git how to merge
)github flow example
)stackoverflow git merge
- stackoverflow 라는 사이트에서 검색)하나의 파일을 여러 브랜치에서 수정하고 머지하려고 할 때 보통 충돌남.
<<<<<<< HEAD
{현재 브랜치의 다른 파일 내용}
=======
{충돌나는 브랜치명 또는 commit에서의 다른 파일 내용}
>>>>>>> 충돌나는 브랜치명 또는 commmit 아이디
충돌 내용 편집 시 갑자기 없었던 내용 추가하면 작업내역에서 추적 불가능.
새로운 내용 추가 하고싶으면 기존에 있는 내용을 사용해서 병합 한 후 (충돌 해결한 후) 그 후에 새로운 커밋을 만들어야함
푸시 풀 확장 개념 배우기
트래킹
트래킹 단위는 브랜치 단위로 트래킹함.
커밋 히스토리에 origin->원격 리포에 넣은 시점
특정 브랜치에 있는 커밋을 푸시하고 풀 하는 개념. 그래서 브랜치 별로 선택해서 트래킹할 수도 안할수도있음
이슈를 쓰는 것 만으로 프로젝트에 기여한다고 함. (contribution)
사용자가 보는 릴리즈용 브랜치, 개발용 브랜치 디벨롭 브랜치 (테스트) -> 디벨롭 브랜치에서 테스트 많이 한 다음에 릴리즈용에 머지하는 경우가 보통임.
작업이 다 된 브랜치는 삭제해줘야 관리할 때 편함.