1. 깃 브랜치 전략을 사용해야 하는 이유
지금 까지 작업할 때는 develop은 만들지 않고 feature 브랜치만 만들어서 main에 push하고 pull request를 날렸는데 그렇게 하면 안된다고 한다. 깃 브랜치 전략에서 main, hotfix, release, develop, feature 총 5개의 브랜치를 사용하는데 이 중에서 main, develop, feature만 만들어서 충돌까지 학습한다.
main - Main 브랜치는 최종 앱, 즉 사용자에게 배포 가능한 버전이 담긴 브랜치이다. 다른 글에서 "master"로 표기된 브랜치가 여기서는 main 브랜치에 해당한다. master라는 용어가 노예제를 연상시킨다는 이유로 현재는 main이라는 명칭이 표준적으로 사용되고 있다. 모든 배포는 이 main 브랜치에서 이루어진다.
develop - 새로운 기능이 main에 추가되기 전에 작업이 이루어지는 브랜치다. 개발자들은 develop 브랜치에서 feature 브랜치를 만들어서 각 기능을 개발한 후, 완료된 코드는 다시 develop 브랜치로 병합된다. 이 과정에서 코드 리뷰와 테스트가 이루어지며, 최종적으로 배포 준비가 완료되면 develop 브랜치의 코드를 main 브랜치로 병합한다.
ex) 예시로, 갤러리 게시판이라는 기능을 개발한다고 가정할 때, develop 브랜치에서 각 기능에 대한 feature 브랜치를 생성하여 작업한다.
-> 여기 까지가 스크럼 마스터(Scrum Master)가 해야 할 작업이다. 즉 직장 상사이자 우리 팀의 개발자 중에 develop을 생성한다.
feature - 우리가 만들어서 작업해야 하는 브랜치로, 기능을 개발하는 브랜치라고 한다. 위에서 main에 추가될 기능마다 develop 브랜치를 만든다고 했는데 실제 만들 기능은 엄청 크기 때문에 이를 여러 개발자들이 feature 브랜치로 여러개 나눠 나중에 작업이 완료되면 PR을 통해 develop 브랜치로 병합(Merge)한다.
ex)
- 개발자 A가 갤러리 게시판의 메뉴 기능을 개발해야 한다면 develop 브랜치에서 feature/gallery-menu 브랜치를 생성하여 작업한다.
- 개발자 B는 갤러리 게시판의 정렬 기능을 개발할 때 develop 브랜치에서 feature/gallery-sort 브랜치를 만들어 작업한다.
각 기능의 개발이 완료되면, 코드 리뷰를 거쳐 develop 브랜치로 병합되고, 최종적으로 모든 기능이 최최최종으로 안정되면 main 브랜치로 병합하여 배포한다.
출처 : (코딩알려주는누나) https://youtu.be/tkkbYCajCjM?feature=shared
https://wiki.webnori.com/pages/viewpage.action?pageId=10813536
이미지 출처 : https://gmlwjd9405.github.io/2018/05/11/types-of-git-branch.html
위에 빨간색으로 친 영역이 우리가 작업해야 할 영역이다. 위 녹색 feature는 이미 작업이 끝나 병합(Merge)까지 끝났고, 밑은 아직 작업중이다.
2. 깃 브랜치 실습
현재는 스크럼 마스터가 프로젝트를 생성했다고 가정한다. 위 브랜치 전략 그림으로 보면 하늘색, 보라색 영역이다.
$ git init
$ git add .
$ git commit -m "first commit"
여기 까지 로컬의 영역이고 다음에는 원격 레파지토리와 연결하는 작업이다.
$ git remote add origin https://github.com/eunho7/git-practice.git
$ git push origin main
git remote add는 새로운 원격 저장소(remote)를 추가(add) 하겠다는 의미이다. 원격 저장소는 깃헙을 의미한다.
origin은 원격 저장소의 이름이다. 바꿀 수 있는데 대부분의 프로젝트에서 origin을 사용한다. 원격의 main이라고 생각하면 된다.
git push는 로컬에서 작업한 것을 원격 저장소로 업로드 하는 명령어이다. 위에서 로컬에서 생성한 프로젝트를 ' $ git commit -m "first commit"'를 사용해서 커밋했는데 원격 저장소에 로컬의 변경사항을 동기화 하겠다는 말이다.
origin main은 로컬 저장소인 'main' 브랜치에 커밋된 변경 사항을 원격 저장소의 main 브랜치인 'origin' 브랜치에 업로드해서 두 브랜치를 동기화 하는 작업이다.
❗아직 직장 상사인 스크럼 마스터의 일이 끝나지 않았다.
$git checkout -b develop
git checkout은 현재 작업 중인 브랜치나 특정 커밋으로 이동하는 명령어이다. '-b'라는 옵션을 줘서 새로운 브랜치를 생성하면서 해당 브랜치로 동시에 이동하라는 뜻이다. develop은 생성할 브랜치의 이름이다.
여기서 문제는 작업하고 있는 영역이 원격일까? 로컬일까? 정답은 로컬이다. 만약 이 부분에서 헷갈린다면 git 좀 더 공부해야한다. 지금은 로컬에 develop 브랜치를 만든것이다. 원격에는 해당 브랜치가 없다는 말이다.
따라서 위 상태에서
$git push
코드를 입력하면 에러 메세지가 뜬다.
'' fatal: The current branch develop has no upstream branch.
To push the current branch and set the remote as upstream, ''
이 에러는 현재 로컬에서 develop 브랜치를 작업 중인데, 이 브랜치가 원격 저장소에 연결되어 있지 않아서 발생하는 에러 메세지이다. 친절하게 어떻게 써야 하는지 코드까지 알려준다.
$git push --set-upstream origin develop
- git push: 현재 로컬 develop 브랜치의 커밋을 원격 저장소의 origin에 푸시한다.
- --set-upstream origin develop: 로컬의 develop 브랜치를 원격 저장소의 origin/develop 브랜치와 연결(업스트림 설정)한다. 이후로는 git push 실행해도 자동으로 develop 브랜치가 원격 저장소와 동기화 된다. 즉 에러 메세지가 뜨지 않는다.
위 코드를 생성하면 깃헙에서 develop 브랜치가 생성된다.
remote: Create a pull request for 'develop' on GitHub by visiting:
remote: https://github.com/eunho7/git-practice/pull/new/develop
위 내용은 chat-gpt의 도움을 받았습니다.
이 메시지는 GitHub에서 새로운 브랜치(develop)를 원격 저장소에 푸시(push)한 후, **Pull Request(PR)**를 생성하라는 안내입니다.
메시지 내용 분석:
- remote::
- 원격 저장소에서 보내온 메시지를 나타냅니다. 여기서 remote:는 GitHub와 같은 원격 저장소 서버에서 보낸 메시지입니다.
- Create a pull request for 'develop':
- 방금 푸시한 로컬 브랜치인 develop에 대해 GitHub에서 Pull Request를 생성할 수 있다는 의미입니다. Pull Request는 개발자들이 각자 만든 기능이나 수정사항을 팀이나 프로젝트의 메인 브랜치(main)에 병합하기 전에 코드 리뷰를 받기 위해 사용하는 방식입니다.
- https://github.com/eunho7/git-practice/pull/new/develop:
- 이 링크를 클릭하면 GitHub에서 develop 브랜치에 대해 새로운 Pull Request를 생성할 수 있는 페이지로 이동하게 됩니다. eunho7/git-practice는 현재 작업 중인 GitHub 저장소이고, /pull/new/develop는 develop 브랜치에 대한 새 PR을 만드는 경로입니다.
To https://github.com/eunho7/git-practice.git
* [new branch] develop -> develop
branch 'develop' set up to track 'origin/develop'.
이 메시지는 로컬 브랜치와 원격 브랜치가 성공적으로 연결(업스트림 설정)되었다는 것을 의미합니다. 각 부분을 설명하자면:
- [new branch]:
- 새로운 브랜치가 원격 저장소에 만들어졌다는 의미입니다. 로컬 브랜치인 develop이 원격 저장소에 푸시되었고, 원격 저장소에도 같은 이름의 새로운 develop 브랜치가 생성되었음을 나타냅니다.
- develop -> develop:
- 여기서 첫 번째 develop은 로컬 저장소의 브랜치를, 두 번째 develop은 원격 저장소의 브랜치를 의미합니다.
- 즉, 로컬의 develop 브랜치가 원격 저장소의 develop 브랜치에 성공적으로 푸시되었다는 뜻입니다.
- "로컬 브랜치가 원격 브랜치로 전송되었다"라고 이해하면 됩니다.
- branch 'develop' set up to track 'origin/develop':
- 이제 로컬 develop 브랜치가 원격의 origin/develop 브랜치를 **트래킹(track)**하도록 설정되었다는 뜻입니다. 즉, 로컬 develop 브랜치와 원격 origin/develop 브랜치가 서로 연결되어 있어 이후로는 git push나 git pull 명령어를 실행할 때 브랜치 이름을 따로 지정하지 않아도 기본적으로 이 두 브랜치가 동기화됩니다.
여기까지가 스크럼 마스터의 역할이다. 다음에는 우리같은 초보 개발자가 어떻게 branch를 생성하고 충돌은 어떻게 해결하는지 알아본다
[결론] : git 쉽지 않다. 영어 모르면 외워
'Git' 카테고리의 다른 글
[Git] pull requset 작성 법, Open a pull request 설명 (0) | 2024.11.04 |
---|---|
[Git] 깃 초보, 깃 브랜치 전략 - main, develop, feature 그리고 충돌(2) (2) | 2024.10.27 |