Forks And Clones

Forks란?

  Open source projects에 참여하고 싶은가? 그렇다면 forks에 대해서 알아야 합니다. fork란 다른 원격 저장소에 있는 히스토리를 그대로 나의 github 원격 저장소에 복사하는 것을 말합니다. 다른 사람의 프로젝트에 바로 push를 할 수 없기 때문에 일단 나만의 프로젝트 버전을 관리하기 위해 다른 사람의 원격 저장소에서 프로젝트를 가져옵니다. 그런다음에 내가 contributing을 원래 원격 저장소로 요청을 합니다. 한마디로 외부 프로젝트를 진행할때 나만의 버전을 관리하기 위해서 fork를 해서 외부 프로젝트에 반영한다고 생각하시면 됩니다. fork를 했다면 나의 github에 있는 저장소에서 로컬로 clone을 합니다. 그럼이제 프로젝트 세팅 끝




외부 프로젝트, 나만의 원격 저장소에 복사하기

https://github.com/solidpple/patchwork 에 접속하셔서 오른쪽 상단에 있는 fork를 누르면 잠시후에 나의 github 저장소에 해당 프로젝트가 복사되는 것을 확인할 수 있습니다. 이 작업을 하기 전에 github에 로그인이 되어 있는 상태여야 합니다. 

원격 저장소에서 로컬 저장소로 가져오기

fork를 했다면 로컬에 있는 저장소로 해당 프로젝트를 가져온 뒤에 작업을 하시면 됩니다. 작업을 하기 위해 프로젝트를 clone할 위치로 이동을 한 뒤에

$ git clone 
$ cd patchwork

clone을 하고 나면 patchwork로 들어가면 프로젝트가 생성된 것을 확인할 수 있습니다. 이제 github의 저장소에 자동으로 연결이된 상태이고, 수정을 한 뒤에 앞서 배운 add, commit, push를 통해 반영을 하시면 됩니다.

기존 원격 저장소 연결하기

기존에 fork한 프로젝트의 변경되는 과정도 확인을 해야 하기 때문에, pull이 가능하도록 해아합니다. 그렇기 때문에 기존 fork한 원격 저장소도 추가를 합니다. https://github.com/jlord/patchwork 아래 git remote의 -v 옵션을 사용해 현재 연결되어 있는 git저장소를 확인 하실 수 있습니다. upstream은 remotename으로 종종 사용자들이 'upstream'으로 사용하기 때문에 사용했습니다. 이제는 pull을 하면 원래 저장소의 변경된 사항도 반영이 됩니다. 반영된 결과를 나의 수정 사항과 함께 나만의 원격 저장소에 반영을 하면 됩니다. 

$ git remote add upstream https://github.com/jlord/patchwork.git
$ git remote -v


[참고] http://jlord.us/git-it/challenges/forks_and_clones.html

  1. kbj0109 2018.01.28 20:07

    좋은 글 잘 봤습니다. 그런데 마지막의 upstream에관한 것을 보고 확인차 질문 드립니다.
    그럼 하나의 Local Branch가 하나 이상의 Remote Repository와 연결이 가능한건가요?
    그리고 가능하다면, Fork를 실행한 오리지널 Remote Repository (A)와 연결을 한 상태에서는 Pull을 하면,
    Fork로 생성한 새로운 저만의 Remote Remote Repository (B) 와 연동되어 A와 B의 변경사항이 제 Local Repository에 같이 적용 되는건가요?
    그러면 Push를 할 떄는 B인 제 Remote로만 반영이 되고, Pull을 할 떄는 A와 B로부터 둘 다 영향을 받는 건가요?

+ Recent posts