다른 사람의 저장소의 코드를 내가 수정하려면 Contribute로 등록이 되어있어야 합니다.
하지만 모든 사람을 다 Contribute로 등록할 순 없죠.
이때 Fork를 이용합니다. 포크로 쿡 찔러 가져오듯 다른 사람의 저장소에 있는 레포지토리를 내 원격 저장소, 깃허브로 가져오는 것입니다. Minji라는 유저가 Gildong의 레포지토리 중 하나를 Fork하였다면 Minji의 github 에 해당 레포지토리가 그대로 가져와 집니다.
Fork해온 레포지토리를 내 로컬에 Clone 한 후 코드를 수정합니다.
Fork : 레포지토리를 원격저장소에 복사
Clone : 레포지토리를 로컬저장소에 복사
민지가 이것 저것 코드를 수정한 후 민지의 원격 저장소에 커밋한 뒤,
수정한 내용이 맘에 들거나 길동의 레포지토리에도 반영이 되면 좋겠다 생각이들면
'Pull Request'를 보내는 것입니다.
1) Fork하기 원하는 저장소에 상단에보면 Fork 버튼이 있습니다. 이를 클릭해서 Fork합니다.
Fork가 완료되면 내 원격 저장소에 해당 레포지토리가 생기게 됩니다. 그리고 밑에 Fork From 원래저장소라고 출력되는 것을 확인할 수 있어요.
2) Clone해서 내 로컬에 옮긴 후 코드를 수정하고 내 원격에 push 합니다.
그리고 원격에 다시 접속해보면 내가 변경한 사항이 반영되어 있습니다.
3) 이제 상단에 Pull requests 를 클릭하면 새로운 pull request를 생성할 수 있는 "New pull request"를 클릭.
그리고 원래 Contributer가 승인을 하면 원래 원격 저장소에 변경된 사항이 반영이 되고, pull request의 상태는 closed로 변경됩니다. 그리고 pull request를 받는 쪽(원래 개발자)에서는 해당 내용을 확인하고 반영해도 좋겠다 싶으면 Merge Confirm를 해줍니다.(Conflict가 없을 때) 맘에 들지 않는다 하면 Reject
Issue & Pull Request
다른 사람들과 깃허브로 협업을 할 때 가장 중요한 부분이 'Issue'입니다. 이슈는 문제점, 또는 개발해야하는 사항, 개선해야 하는 것 등등의 이슈를 모아놓은 게시판 이라고 생각하면 됩니다.
New issue 버튼을 눌러 새로운 이슈를 생성해줄 수 있습니다.
제목과 내용을 작성하고, 오른쪽 메뉴를 보면 여러가지 옵션을 지정할 수 있습니다. 그리고 이슈 별로 미리 양식을 지정해놓을 수 있는데 이슈 템플릿 등록하기 글을 참고해주세요.
Assignees : 이슈를 해결해줄 사람 지정.
Labels : 이슈의 카테고리를 지정. 예를 들어, duplicate는 이미 누군가 이슈를 만들었으므로 지워도 된다는 뜻
Milestone : 해당 작업이 속한 파트. ex) Version 1.0.0
이슈가 해결되면 다시 그 이슈로 들어가 Close Issue 해줍니다.
이슈가 중요한 이유는 생성된 Issue Number 기반으로 Branch를 생성할 수 있다는 점입니다.
일단, 프로젝트에서 이슈에 관해 새로운 브랜치를 만들어 수정해 줍니다.
git checkout -b 브랜치명 // 브랜치 생성 후 checkout
그리고 커밋하고 푸쉬하고 생성한 브랜치에 대해 원격 저장소에서 pull request를 생성해줍니다.
수정한 내용을 작성하고
* resoved 뒤에 이슈넘버를 입력합니다. 이슈넘버를 클릭하면 해당 이슈로 넘어갈수 있습니다.
그리고 master Branch 에 pull request가 Merge되면 pull request는 자동으로 closed됩니다.
자동으로 closed되는 것이 싫다면 issue: #[issue number]를 입력해주면 됩니다.