티스토리 뷰
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 |
- Total
- Today
- Yesterday
- css
- 버츄어박스
- css 박스
- 파이썬 for
- 자료구조
- 파이썬 예제
- 백준 10451
- 파이썬
- 파이썬 선택문
- 자바스크립트 그래프
- 백준
- 자바스크립트 자료구조
- 자바 에센셜 실습문제
- 백준 11501
- 파이썬 문자열
- 파이썬 while
- 파이썬 터틀
- 백준 1874
- 파이썬 if문
- 파이썬 함수
- 파이썬 진수 변환
- 웹
- 파이썬 리스트
- 명품 c++ 실습
- 자바
- 파이썬 객체
- 파이썬 단계적 개선
- css 그리드
- 파이썬 연산자
- 파이썬 클래스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |