막무가내 삽질 블로그
Git 정리 #2 본문
Forking WorkFlow 방식에 대해 정리 해볼려 한다.
Forking WorkFlow
-
모든 프로젝트 참여자가 개인적인 로컬 저장소와 공개된 자신의 원격 저장소, 즉 두 개씩의 Git 저장소를 가지는 방식이다.
-
모든 코드 기여자가 하나의 중앙 저장소에 푸시하는 것이 아니라, 각자 자신의 원격 저장소에 푸시하고, 프로젝트 관리자만 다른 개발자들의 기여분을 중앙 원격 저장소에 병합할 수 있다는 점이 가장 큰 장점이다.
-
아주 큰 규모의 분산된 팀에서도 안전하게 협업하기에 좋은 협업 방식
-
오픈 소스 프로젝트에서 많이 사용하는 방식
중앙 원격저장소, 자신의 원격 저장소, 로컬 저장소의 개념
-
중앙 원격 저장소 : 여러 명이 같은 프로젝트를 관리하는 데 사용하는 그룹 계정의 중립된 원격 저장소
-
자신의 원격 저장소 : remote repository라고 불린다, 파일이 Github 전용 서버에서 관리되는 원격 저장소
-
로컬 저장소 : local repository라고 불린다,so pc에 파일이 저장되는 개인 전용 저장소
중앙 원격 저장소를 fork 해서 자신만의 원격 저장소를 만든다.
중앙 원격 저장소를 복제한 저장소는 개인의 공개 저장소(remote repository) 역할을 한다.
다른 개발자는 자신의 원격 저장소에 푸시할 수 없다(내려 받는 것은 가능)
remote repository를 복제하여 local repository로 만들 수 있다.
git clone [remote repository URL]
git clone [remote repository URL]
두 개의 원격 저장소를 연결해야 한다.
하나는 포크한 자신의 원격 저장소(remote repository)이고, 다른 하나는 프로젝트 중앙 원격 저장소이다.
이름은 아무렇게나 붙여도 되지만, 일반적으로 fork한 원격 저장소는 origin(자동으로 만들어짐), 프로젝트 중앙 원격 저장소는 upstream으로 붙이는 것이 일반적이다. upstream 별칭은 자동으로 생성되지 않으므로, 직접 지정해줘야 한다.
git remote add upstream [중앙 원격 저장소 URL]
git remote add upstream [중앙 원격 저장소 URL]
이렇게 연결해 줘야만 로컬 저장소를 프로젝트 중앙 원격 저장소와 같은 상태로 유지할 수 있다.
중앙 원격 저장소와 자신의 원격 저장소에는 각각 master branch가 있고, 자신의 로컬 저장소에는 master branch와 기능을 구현할 feature or topic branch가 있다고 가정한다.
기능 구현할 branch는 반드시 master branch에서 생성해야 한다
# 브랜치를 생성 하고 브랜치를 이동
git branch [branch name]
git checkout [branch name]
# 위에 두 명령어를 하나로 합친 명령어(생성 하자마자 이동)
git checkout -b [branch name]
기능구현 할 branch로 이동 후 작업을 하고 작업이 끝나면 커밋 후 푸시를 한다.
이 떄 프로젝트 중앙 원격 저장소가 아니라, 자신의 원격 저장소로 푸시한다. 푸시를 하면 나의 원격 저장소에도 똑같은 브랜치가 생긴다.
git add .
git commit -m "commit message"
git push origin [branch name]
프로젝트 관리자(소규모 팀에서는 모두가 관리자가 될 수 있음)에게 자신의 기여분을 반영해 달라는 pull request를 던진다.
-
내가 만든 기능을 중앙 원격 저장소에 반영하기 위해선, 프로젝트 관리자에게 pull request를 해야 한다. (위 그림에서 compare & pull request를 클릭한다)
프로젝트 관리자는 변경 내용을 확인한 후 중앙 원격 코드 베이스에 병합한다.
-
GitHub 페이지에서 Pull request 버튼을 누른 후, File changed 탭에서 변경 내용을 확인한다.
-
Conversation 탭으로 이동하여 Confirm merge를 하면 중앙 원격 코드 베이스에 병합(merge) 된다.
-
충돌이 일어난 경우는 팀원들과 합의 하에 충돌 내용을 수정한 후 병합을 진행한다.
중앙 원격 저장소와 자신의 로컬 저장소를 동기화 하기 위해 로컬 저장소의 branch를 master branch로 이동 한다
git checkout master
중앙 원격 저장소의 코드 베이스에 새로운 커밋이 있다면 pull로 가져온다
메인 코드 베이스가 변경되었으므로, 프로젝트 참여하는 모든 개발자가 자신의 로컬 저장소를 동기화 해서 최신 상태로 만들어야 한다.
(반드시 master branch에 갱신해야 한다)
git pull upstream master
새로운 기능을 추가하기 위해서 그 작업에 대한 branch를 생성하여 작업한다
참:https://gmlwjd9405.github.io/2017/10/28/how-to-collaborate-on-GitHub-2.html
-끝-
'Git' 카테고리의 다른 글
Learn about git rebase --interactive (1) | 2022.06.15 |
---|---|
깃허브 퍼블릭 주소에서 원하는 브랜치 가져오기 (3) | 2020.11.19 |
Git 정리 #1 (2) | 2020.06.29 |