Skip to content

Latest commit

 

History

History
224 lines (153 loc) · 10.5 KB

Github_Private_Collaboration.md

File metadata and controls

224 lines (153 loc) · 10.5 KB

Github Private으로 협업하기

Github의 Private 레포지토리는 유료 플랜으로 사용 가능했었으나, 이제 무료로 오픈되어 누구나 사용할 수 있게 되었습니다.
(얼마 전까지 collaborator 3인 등록까지만 무료였었지만 이마저도 풀렸습니다)
=> Github Private Repo 무료

따라서, github private 레포지토리를 이용해 협업을 하지 않을 이유가 없어졌습니다.

이 문서에서는 Github Private 레포지토리를 이용한 협업에 대해 몇 가지 실습을 통해 알아보겠습니다.

아키텍쳐

image

  1. 각 사용자가 로컬에서 코드 작성 후 브랜치(User1, User2, User3)를 생성하여 Private 레포지토리로 Push
  2. 각 사용자는 Github에서 Push한 브랜치에 대해 Pull Request
  3. 관리자가 Pull Request에 대해 검토 후 main 또는 master 브랜치에 Merge

협업에서의 유의사항

협업을 할 때는 반드시 아래의 조건을 지켜줘야 합니다.

  1. 모든 협업자는 main 또는 master 브랜치로 절대 Push하지 말 것!
  2. 로컬에서 자신만의 브랜치를 생성한 후 브랜치를 Push 할 것!
  3. Pull Request를 받은 관리자는 Merge 후 반드시 브랜치를 지울 것!
  4. 관리자를 제외한 개발자는 Merge를 건드리지 말 것!

Priavte 레포지토리 생성

Github에서 Private 레포지토리를 생성합니다.
image
image

git clone(윈도우 기준)

윈도우에서 Git bash를 열고 원하는 폴더로 들어가 git clone 명령을 수행합니다.

git clone <레포지토리 URL>

레포지토리 URL은 레포지토리에서 확인 가능합니다.
image

Collaborator

Private 레포지토리는 아무나 접근할 수 없습니다.

특정 사용자가 접근하도록 허용하고 싶다면 Settings > Collaborator 탭으로 들어가 해당 사용자에 대해 등록을 해주어야 합니다.
image

사용자의 이름 또는 이메일로 등록할 수 있습니다.
image

로컬 사용자에서 Git bash에 등록된 이름 또는 이메일이 궁금할 경우 아래의 명령을 통해 확인 가능합니다.

git config --list

image

만약 해당 항목이 없다면 직접 Git bash에 이름과 이메일을 환경 변수로 등록할 수도 있습니다.

git config --global user.name "<사용자이름>"
git config --global user.email "<이메일주소>"

코드 수정 후 Github로 Push(개발자)

먼저 브랜치를 생성하고 그 안에서 작업합니다.

git checkout -b hyeob

기존의 README.md 파일을 변경해보겠습니다.

vim README.md
# README.md
# test

## hyeob 브랜치에서 수정한 내용입니다.

변경한 파일에 대해 추가, 커밋합니다.

git add .
git commit -m "hyeob README.md 파일 변경"

Private 레포지토리에 현재 브랜치의 내용을 Push합니다.

git push origin hyeob

Private 레포지토리로 접근하면 hyeob 브랜치가 생성되고 수정된 코드가 Push 된 것을 볼 수 있습니다. image

Pull Request(개발자)

자신이 Push한 코드에 대해 Pull Request를 통해 관리자에게 Merge 검토를 요청합니다.
image

제목과 내용을 작성한 후 Create pull request 버튼을 눌러 Pull Request 합니다.
image

Pull Request를 하게 되면 Private 레포지토리의 특성상 모두에게 Merge가 가능한 권한이 주어져 있습니다.

하지만, 원활한 프로젝트 관리를 위해 절대 관리자 이외에는 Merge를 건드리지 않도록 주의합니다!

검토 후 Merge(관리자)

관리자는 Pull Request 탭에서 개발자로부터 온 Pull Request들을 확인할 수 있습니다.
image

Commits 탭을 통해 커밋 내용을 볼 수 있고,
image

해당 커밋을 클릭해서 수정된 코드의 내용을 볼 수 있습니다.
image

검토 후 문제가 없다고 판단되면 Merge pull request 버튼을 누릅니다.
image

다시 한 번 Confirm merge 버튼을 눌러서 적용합니다.
image

Merge가 완료되었습니다. 해당 Pull request에 사용된 브랜치는 지우도록 합니다.
image

main 브랜치를 보면 hyeob 브랜치에서 수정한 내용이 merge 되어 나타난 것을 볼 수 있습니다.
image

이전 버전으로 되돌아가기(개발자)

개발자가 개발을 하다보면 여러 문제로 코드를 롤백하고 싶을 때가 있습니다.

이럴 때 reset 또는 revert 명령어를 이용하는데, 만약 원격 레포지토리에 한 번이라도 push를 했다면 revert 명령어만 가능합니다.

현재 위의 실습에서 다시 한 번 README.md 파일이 수정되어 아래와 같이 main 브랜치에 merge된 상태입니다. image

나 이전 코드로 돌아갈래 문구가 사라진 이전 버전의 코드로 되돌아가고 싶습니다.
image

Git bash에서 git log 명령어를 수행합니다.

git log

자신이 커밋한 이력(위쪽이 최신)이 나타납니다. 여기서 두 번째 커밋한 내용으로 되돌아가고 싶습니다.
image

이때 유의할 점은 내가 되돌아가고 싶은 커밋의 위쪽 버전을 선택해야 한다는 것입니다.
image

커밋 고유 id의 앞에 8자리 정도만 입력해서 git revert 명령어를 수행합니다.

git revert 705bc12e

image

엔터를 누르면 아래의 편집기가 나타나는데, 커밋 메시지를 적어줍니다.
image

엔터를 누르면 롤백이 완료됩니다.

커밋이 모두 완료된 상태이기 때문에 Push 명령만 다시 수행합니다.

git push origin hyeob

Private 레포지토리에는 롤백된 버전의 코드가 브랜치로 생성됩니다. image

Pull Request 후 Merge하면 main 브랜치의 코드가 이전 버전으로 되돌아갑니다.
image

동시성 이슈 해결(관리자)

만약 A라는 같은 버전의 소스로 user1user2가 각각 BC라는 코드로 변경해 Merge를 하려고 한다면 Conflict 문제가 발생합니다.

예를 들어 아래 내용의 README.md 파일을 가지고

# test

## hyeob 브랜치에서 수정한 내용입니다.

hyeob 브랜치에서는 아래와 같은 내용을 추가하고,

# test

## hyeob 브랜치에서 수정한 내용입니다.

## hyeob 브랜치에서 추가한 내용

yun 브랜치에서는 아래의 내용을 추가한 뒤,

# test

## hyeob 브랜치에서 수정한 내용입니다.

## yun 브랜치에서 추가한 내용

main 브랜치로 merge 하게 되면 아래와 같이 충돌 현상이 발생합니다.
image

Resolve conflicts 버튼을 눌러보면 아래와 같이 어느 부분에서 브랜치끼리의 충돌이 발생했는지 나타납니다.
image

만약 두 브랜치에서 추가한 내용을 모두 쓰고 싶다면 여기서 코드를 편집한 뒤 Mark as resolved 버튼을 누릅니다.
image

Commit merge 버튼이 나타납니다. 클릭합니다.
image

이제 정상적으로 Merge 할 수 있게 되었습니다.
image

Merge를 완료하면 main 브랜치는 충돌을 해결한 내용의 코드로 나타난 것을 확인할 수 있습니다.
image