간단한 Github 협업 절차 이해를 위해 Branch 네이밍 규칙은 생략하고 2개로 한정했습니다.
branch (브랜치)
Git에서 개발 작업을 분리하고 독립적으로 진행하기 위한 개념
Master branch와 Sub branch를 분리하는 이유는 안정성 유지, 동시 작업 가능성, 기능 개발과 병합, 코드 검토 등의 이점을 얻기 위해서이다.
안정성을 위해 완전히 테스트되고 검증된 코드가 포함되어야 함.
push
pull
staging (스테이징)
git add .
commit (커밋)
팀장과 팀원1,팀원2가 있다고 가정했습니다.
요약 : 팀장이 개설 -> 팀원1 변경점 반영 -> 팀원2 변경점 반영
git add .
로 스테이징 영역에 변경점을 추가합니다.# 레포지토리 클론
git clone <레포지토리 URL>
# 작업 디렉토리로 이동
cd <레포지토리 이름>
# 초기 코드 커밋
git add .
git commit -m "Initial commit"
git push origin master
# sub branch 생성 및 이동
git checkout -b <sub branch 이름>
clone
으로 master branch의 초기코드를 받아 각자 작업을 합니다.#작업할 디렉토리로 이동
cd <작업디렉토리>
#원격 저장소의 코드를 로컬로 복제
git clone <원격저장소주소>
# 변경된 파일 스테이징
git add .
# 커밋
git commit -m "팀원1 작업 내용 커밋"
# master 브랜치로 이동
git checkout master
# sub branch를 master 브랜치로 병합
git merge <sub branch 이름>
# 원격 저장소에 업로드
git push origin master
팀원2의 pull
팀원2는 작업 중이던 내용이 있는 상태에서, 팀원1의 변경점이 적용된 master branch를 pull로 최신 프로젝트를 받아옵니다.
이 작업은 팀원1의 커밋을 기준으로 팀원2의 변경 사항을 추가하므로, 팀원2의 코드가 사라지지 않습니다.
Git은 변경 사항을 결합하고 충돌이 발생할 경우 이를 알려줍니다.
위의 과정(pull) 을 거치지 않으면 원격 저장소에 있는 새로운 commit 내역은 팀원2의 pc에는 존재 하지 않기 때문에 rejected 에러가 발생할 수 있습니다.
# master 브랜치로 이동
git checkout master
# 최신 변경 사항 가져오기
git pull origin master
# 변경된 파일 스테이징
git add .
# 커밋
git commit -m "팀원2 작업 내용 커밋"
# sub branch로 이동
git checkout <sub branch 이름>
# sub branch를 master 브랜치로 병합
git merge master
# 원격 저장소에 업로드
git push origin master
push한 브랜치는 pull request를 통해 병합해야 원격 저장소에 반영이 됩니다.
branch 설명 옆에 New pull request를 클릭합니다.
풀 리퀘스트에 대한 메세지를 작성 한 후 Create pull request를 누르면 협업중인 저장소에 풀 리퀘스트가 전송됩니다.
협업중인 원격 저장소에 등록된 풀 리퀘스트는 공동 작업자 중 누구나 병합할수 있습니다.
저장소 파일 목록 위의 Pull request를 누르면 등록된 풀리퀘스트 목록이 나옵니다.
풀 리퀘스트 메세지를 살펴본 다음 이상이 없으면 Merge pull request를 누럴 병합합니다.
필요하다면 이 공간을 통해 풀 리퀘스트를 남긴 사람과 메시지를 주고 받을수도 있습니다.
브랜치가 병합된 상태라면 'merged'라고 표시되어 있습니다. 또한 어떤 협업자가 브랜치를 병합했는지도 알수 있습니다.
깃허브에서 협업을 할 때는 보통 작업자 마다 브랜치를 만들어서 진행하고, 작업 중간중간 풀리퀘스트를 보내서 master 브랜치에 병합합니다. 그래서 깃허브로 협업을 할 때는 다른 작업자의 변경 내용을 바로 반영하기 위해 항상 pull을 먼저 당긴후에 자신의 작업을 진행하는 것을 권장합니다.
reference : [Git & GitHub] 협업하기