-
[Github] 외부 저장소 fork, pull request, 동기화 하기저장소/git 2019. 12. 7. 18:51
외부 저장소를 fork를 하고 내용을 수정한 다음, 해당 저장소의 master에게 내가 변경한 사항을 확인하고 머지해 주세요 라는 의미로 pull request를 요청할 수 있습니다. 또한 원본 저장소에서 변경된 사항이 있으면 fork를 받은 내 저장소에는 반영이 되지 않으므로 동기화를 시켜줘야 합니다.
외부 저장소 fork하기
fork 할 저장소에 들어간 다음, star 버튼 옆에 있는 fork 버튼을 누릅니다.
organization이 여러개일 경우, 아래와 같이 팝업이 나오는데 fork할 위치를 지정해 줍니다.
fork에 성공하면 아래와 같이 계정에 새로운 저장소가 생성됩니다.
fork를 진행한 다음, 로컬에 해당 저장소의 파일을 내려받습니다.
$ git clone https://github.com/brownbears1/flit.git Cloning into 'flit'... remote: Enumerating objects: 67, done. remote: Counting objects: 100% (67/67), done. remote: Compressing objects: 100% (45/45), done. remote: Total 3408 (delta 34), reused 46 (delta 22), pack-reused 3341 Receiving objects: 100% (3408/3408), 702.39 KiB | 953.00 KiB/s, done. Resolving deltas: 100% (2290/2290), done.
pull request
pull request를 요청하기 전에 아래와 같이 작업을 진행해야 합니다.
위와 같이 fork 저장소를 clone 했다면 origin 이라는 이름에 fork 저장소가 지정되어 있습니다. 원본 저장소의 주소도 저장해야 하기 때문에 아래와 같이 명령어를 입력한 다음 확인합니다.
$ git remote -v origin https://github.com/brownbears1/flit.git (fetch) origin https://github.com/brownbears1/flit.git (push) $ git remote add origin-flit https://github.com/takluyver/flit.git $ git remote -v origin https://github.com/brownbears1/flit.git (fetch) origin https://github.com/brownbears1/flit.git (push) origin-flit https://github.com/takluyver/flit.git (fetch) origin-flit https://github.com/takluyver/flit.git (push)
파일 생성/변경이 전부 끝났다면 이제 fork 저장소에 push를 진행합니다.
$ git add . $ git commit -m 'test' $ git push origin master
push가 완료되었다면 이제 본인의 fork 저장소 페이지에 들어간 후, code 탭 옆의 Pull Request를 누른 다음 New Pull Request 버튼을 클릭합니다.
누르면 내가 push한 내용을 확인할 수 있고 원본 저장소의 어느 브랜치로 머지할지, 내 fork 저장소의 어느 브랜치로 pull request를 요청할지 고를 수 있습니다.
완료되었으면 pull request의 내용을 작성해야 하기 때문에 Create pull request 버튼을 클릭합니다.
제목과 내용을 작성한 후, Create pull request 버튼을 누르면 원본 저장소에 pull request 요청이 완료됩니다.
fork 저장소 동기화
위 순서대로 진행했으면 원 저장소의 주소가 입력되어 있지만 만약 아닐 시, 아래 명령어로 추가해 줍니다.
$ git remote add origin-flit https://github.com/takluyver/flit.git $ git remote -v origin https://github.com/brownbears1/flit.git (fetch) origin https://github.com/brownbears1/flit.git (push) origin-flit https://github.com/takluyver/flit.git (fetch) origin-flit https://github.com/takluyver/flit.git (push)
다음 외부 저장소의 최신 내용을 가져옵니다.
$ git fetch origin-flit
다음 merge를 할 브랜치로 변경한 다음, 위에서 가져온 최신 내용을 merge 해줍니다.
$ git checkout master $ git merge origin-flit/master
위 작업이 끝났으면 내 fork 저장소에도 반영을 해줍니다.
$ git push origin master