티스토리 뷰

Forking WorkFlow 방식의 협업

- 모든 프로젝트 참여자개인 로컬 저장소와 공개된 자신의 원격 저장소(중앙 원격 저장소를 fork한 것), 이 두개의 저장소를 가지고 협업을 진행하는 방식이다.

- 모든 코드 기여자중앙 저장소에 푸시하는 것이 아니라, 각자 자신의 원격 저장소에 푸시하고 이 내용을 중앙 원격 저장소에 Pull Request 한다. 그리고 프로젝트 관리자(Owner)가 다른 개발자들의 기여분(PR)을 중앙 원격 저장소에 병합할지 안할지 결정하는 것이 특징이다.

- 오픈소스 프로젝트에 많이 사용하는 방식

 

 

중앙 원격 저장소, 자신의 원격 저장소, 로컬 저장소 개념

- 중앙 원격 저장소 : 여러 명이 같은 프로젝트를 관리하는 데 사용되는 그룹 계정(Organization)의 중립된 원격 저장소

- 자신의 원격 저장소 : remote repository, 깃허브의 repository

- 로컬 저장소 : local repository, 내 PC에 저장되는 개인 전용 저장소

 

 

 

1. 중앙 원격 저장소를 포크(fork)해서 자신만의 원격 저장소를 만든다.

- 중앙 원격 저장소나의 깃허브 계정 저장소에 복제한다는 개념.

- 자신의 깃허브 계정에 중앙 원격 저장소와 똑같은 내용의 저장소가 복제된다.

- 개인 공개 저장소로 저장되므로 중앙 원격 저장소와 독립적으로 운영된다.

 

 

 

 

2. 프로젝트 참여자는 git clone 명령으로 로컬 저장소를 만든다.(최초 1회)

- git clone 명령으로 자신의 원격 저장소(fork하고 저장소 자신의 계정에 생선된 저장소)를 로컬 저장소에다 복제한다.

 

1
2
$ cd Desktop
$ git clone [자신의 원격 저장소 URL]
cs

 

 

 

 

 

3. 원격 저장소 연결하기 (최초 1회)

- 깃허브 저장소에 push 하거나 pull 할때 매번 url를 작성하기 번거롭다.

- 그래서 각 url에 이름을 붙여줄 수 있다.

- 이름은 아무렇게나 붙여도 되지만, 일반적으로 포크한 자신의 원격 저장소 origin(git clone 할 때 자동으로 origin으로 짓는다)

- 프로젝트 중앙 원격 저장소 upstream으로 이름을 짓는다. (이 부분은 자동으로 생성되지 않아 직접 명령어를 작성해서 지정해줘야 한다.)

 

1
$ git remote add upstream [중앙 원격 저장소 url]
cs

 

 

 

 

4. 자신이 구현할 기능 이름으로 브랜치를 하나 생성, 그 브랜치로 이동한 뒤 프로젝트 작업을 진행한다.

- 새로운 기능 개발을 위해, master 브랜치와 격리된 새로운 branch를 만들어야한다.

- 구현할 기능 이름으로 브랜치 이름을 짓는다. (ex. map branch, weapon branch . . .)

- 새로 만든 브랜치로 이동한 뒤 코드를 작성하고 변경내용을 커밋하며 프로젝트를 진행한다.

- 주의! 반드시 master 브랜치에서 브랜치를 생성해야 한다!  

 

1
$ git checkout -b [branch name] 
cs

 

위 명령어는 아래의 두 명령어를 합한 것

 

1
2
$ git branch [branch name] // 새로운 브랜치 생성
$ git checkout [branch name] // 해당 프랜치로 작업 위치 이동
cs

 

 

 

 

 

5. 로컬 저장소에서 커밋한 이력을 자신의 원격 저장소로 push 한다.

- 기능 구현을 마친 후 커밋한 내용을 푸시 할 때는 프로젝트 중앙 원격 저장소가 아니라, 복제(clone)했던 자신의 원격 저장소로 푸시한다.

- 푸시하고 나면 나의 원격 저장소에도 똑같은 브랜치가 생긴다.

 

1
2
3
$ git add . // 자신이 변경, 추가한 모든 파일을 스테이징 영역(커밋 준비 상태)에 추가,
$ git commit -m "커밋 메세지" // add 한 파일들을 커밋한다. 
$ git push origin [branch name] // [branc name]에 해당하는 브랜치를 자신의 원격 저장소에 push
cs

 

 

 

 

6. 프로젝트 관리자에게 자신의 기여분을 반영해 달라는 pull request를 던진다.

- 내가 만든 기능을 중앙 원격 저장소에 반영하기 위해선, 프로젝트 관리자에게 반영 요청(pull request)해야 한다.

- 나의 원격저장소 깃허브 페이지에서 구현한 기능의 브랜치를 선택해 pull request 버튼을 눌러 요청한다.

 

 

 

 

 

7. 프로젝트 관리자는 변경 내용을 확인한 후 중앙 원격 코드 베이스에 병합(merge)한다.

- 모든 팀원이 변경한 코드 내용을 확인하고 프로젝트 관리자병합(merge)를 진행한다.

- 충돌이 일어난 경우 팀원들과 합의 후 충돌 내용을 수정한 후 병합을 진행한다.

- 병합이 성공하면 중앙 원격 저장소의 master 브랜치에는 새로운 내용이 갱신되어있는 상태가 된다.

- 중앙 원격 저장소에 map branch가 생기는 것이 아닌, master 브랜치에 map branch 내용이 갱신되는 것이다.

 

 

 

 

 

 

8. 중앙 원격 저장소와 자신의 로컬 저장소를 동기화 하기 위해 작업위치를 master branch로 이동한다.

- 중앙 코드 베이스가 변경되었으므로, 자신의 로컬 저장소를 동기화 해서 최신상태로 만들어야한다.

- 최신상태로 만들기 이전에 로컬 저장소 작업 위치를 master 브랜치로 이동해야한다.

- 주의! master 브랜치로 이동 한 후 새로운 내용(중앙 원격 저장소 변경 내용)을 받아와야 한다.

 

1
$ git checkout master
cs

 

 

 

 

 

 

9. 중앙 원격 저장소의 코드 베이스에 새로운 커밋이 있다면 로컬 저장소에 갱신한다.

- 중앙 코드 베이스가 변경되었으므로, 모든 프로젝트 팀원자신의 로컬 저장소를 동기화 해서 최신상태로 만들어야한다.

- 아래의 명령어를 이용해 최신 상태로 동기화 한다.

- 다시말하지만 반드시 master 브랜치에서 갱신해야한다!

 

1
$ git pull upstream master
cs

 

 

 

 

 

10. 새로운 기능을 추가하기 위해 그 작업에 대한 branch를 생성하여 작업한다.

- 최신상태로 동기화된 로컬 저장소의 master 브랜치에서 새로운 작업에 대한 브랜치를 생하여 또 다른 작업을 진행한다.

 

 

 

 

 

reference : https://gmlwjd9405.github.io/2017/10/28/how-to-collaborate-on-GitHub-2.html

'버전 관리 > git' 카테고리의 다른 글

[git]branch 정보확인  (2) 2018.01.28
[git]git 명령어 정리  (0) 2018.01.27
댓글