fork clone & clone 및 pull request

재우·2023년 8월 27일
0
post-custom-banner
  • 원본 레포를 fork에서 clone해서 pull request 및 merge
  • 원본 레포를 clone해서 pull request (merge x)

위 2가지 방법을 알아보자.

먼저 원본 레포를 fork에서 clone해서 pull request 및 merge 부터 알아보자.

  1. 클론하려는 원본 레포에 들어간다.
  1. 우측하단에 fork를 누른다.

  1. create fork를 한다.

  1. 그럼 내 깃허브 레포를 보면 forked가 되어있다. 즉, 내 깃허브에 레포가 생겼다.

  1. 포크한 내 레포에도 브랜치를 파줘야한다.

    5-1. 브랜치를 생성할 땐, 포크한 본인 레포에서 원본 레포에 PR하는 방식이므로, 포크한 본인 레포지토리를 선택한다. 브랜치 생성하고 작업, 커밋하는 건 포크한 자신 리포지토리에서 하고 원본 리포지토리에는 PR 통해서 머지되는 형태이다. (원본 레포는 원본 저장소에서 변경이 잦거나, 내 저장소에 유지할 필요 없을 때 선택한다.)


    5-2. 브랜치를 생성하면 기준이 되는 브랜치가 필요하기 때문에 기준이 되는 브랜치를 선택한다. 즉, 어느 브랜치를 기준으로 클론을 할것인지를 선택하는 것이다.

  1. code를 눌러서 url을 복사한다.


아래 절차부터는 실제 원본 레포를 포크해서 PR하는것은 번거로우므로 개인 레포에서 포크해서 클론을 연습해본다. 하는 과정은 똑같음.

  1. vscode에 진입한다. (클론할 빈 폴더가 있어야함.)

  1. cd를 통해 텅 빈 폴더로 이동하고, git clone -b <branch명> <remote_repo 주소> 을 터미널에 입력해준다. <branch명>은 fork 한 레포에서 생성한 브랜치에다가 클론할 것이므로 fork 한 레포에서 생성한 브랜치를 적어준다.
    => 브랜치를 팔 때, 선택했던 브랜치를 기준으로 브랜치를 팠으므로 clone을 하게되면 선택했던 브랜치에 있는 코드의 내용이 clone된다.

  1. clone이 되었다.


코드를 수정해서 작업을 하기 전에 먼저 원본 레포 Remote 설정을 해야한다. 아래 블로그의 3,4번을 참고해서 하자.

https://inpa.tistory.com/entry/GIT-%E2%9A%A1%EF%B8%8F-%EA%B9%83%ED%97%99-PRPull-Request-%EB%B3%B4%EB%82%B4%EB%8A%94-%EB%B0%A9%EB%B2%95-folk-issue



이제 클론된 폴더를 vscode에서 열어보고, 코드를 수정해서 커밋 및 푸시해보자.

https://inpa.tistory.com/entry/GIT-%E2%9A%A1%EF%B8%8F-%EA%B9%83%ED%97%99-PRPull-Request-%EB%B3%B4%EB%82%B4%EB%8A%94-%EB%B0%A9%EB%B2%95-folk-issue
위 블로그 내용 대로 커밋 및 푸시해도 되는데, 주의해야할 점은 git push origin father이 아니라 git push origin b-teddy로 해야한다. origin에 있는 b-teddy 브랜치에 올린다는 뜻이다. origin은 fork한 레포지토리를 가리키고 있다.

커밋 및 푸시가 완료된 모습이다.

아래 절차대로 커밋 및 푸시를 해도되지만 위 방법대로 해보자.

  1. 코드를 수정하고 source control을 눌러보면 이렇게 변경사항이 있다.

  1. 커밋할 내용의 파일에 대해서 + 버튼을 눌러서 스테이징해준다. 그리고나서 커밋메세지를 입력하고나서 commit을 누른다.

  1. 좌측 하단 푸쉬 버튼을 클릭한다.

  1. ok 선택 시 push가 완료된다.

이렇게 fork한 본인 레포의 브랜치에서 작업을 하고나서, 원본이 있는 레포의 브랜치로 PR(Pull Request)를 해야한다.

예를들면 본인 레포의 b-teddy 브랜치에서 작업을 하고나서, 원본 레포의 b-teddy 브랜치로 PR 및 merge를 해야한다.

  • fork한 브렌치가 origin이니까 거기서 작업하고나서, 원본 레포에 b-teddy 브랜치 만들어준 뒤 원본 레포의 b-teddy로 풀리퀘스트 및 merge 해주면 된다. 즉 jaeuu: b-teddy => asac: b-teddy가 되는것이다.

커밋 및 푸시를 완료한 위 화면에서 compare & pull request를 누르면된다.

포크한 레포의 브랜치에서 작업한 내용을 원본 레포의 브랜치로 pull request를 해야하는데, 원본 레포에 내가 만든 브랜치가 없기 때문에, 원본 레포로 가서 b-teddy 브랜치를 만들어줘야한다.
즉, fork한 레포의 브랜치랑 별개로 원본 레포인 asac에도 브랜치를 하나 더 파야된다.

  • 원본레포(asac)에서 fork하고 A branch 판 이유 : 내 레포의 A브랜치에서 작업하기 위해
  • 원본레포(asac) 에서 B branch 판 이유 : 내 레포의 A브랜치에서 작업한 내용을 원본레포의 B브랜치에 보내는 pull request를 하기위해
  • 이렇게 하면, A 브랜치와 B 브랜치는 서로 동기화가 된다.
    여기서 머지하면 asac:b-teddy에 소스 코드가 올라가게 된다.




그 다음은 원본 레포를 clone해서 pull request (merge x) 알아보자.

  1. 클론하려는 원본 레포에 들어간다.

  1. 브랜치를 파준다. Source에는 어떤 브랜치를 기준으로 clone할지를 선택하는 부분이다. secondbranch를 기준으로 clone 해보자.

  1. 위에서 진행했던 방식대로 vscode 터미널에서 cd를 통해 텅 빈 폴더로 이동하고, git clone -b <branch명> <remote_repo 주소> 을 터미널에 입력해준다. <branch명>은 레포에서 생성한 브랜치에다가 클론할 것이므로 레포에서 생성한 브랜치를 적어준다. 여기서는 final.
    => final 브랜치를 팔 때, secondbranch를 기준으로 브랜치를 팠으므로 clone을 하게되면 secondbranch에 있는 코드의 내용이 clone된다.


이제 클론된 폴더를 vscode에서 열어보고, 코드를 수정해서 커밋 및 푸시해보자

fork 한것이 아니므로 위에 있었던 원본 레포 Remote 설정은 생략해도 될 것 같다.



  1. 커밋 및 푸시를 하고나서 copare & pull request를 해보자.


  1. base를 선택을 해야하는데, base는 추후 PR이 완료되면 merge될 브랜치이다.
  • 즉 merge를 하고나서 코드 내용이 반영되는게 베이스이다.
  • 일반적으로는 하위 브랜치(final)를 만든 상위브랜치(여기서는 secondbranch)로 pull request 및 merge하는게 일반적이지만, main에다가 바로 해도된다.
    main으로 해도 merge만 안하면 코드 반영이 안되므로!
  • 일반적으로는 예를들면 secondbranch를 기준으로 final 브랜치를 파서 클론을 했으면 pull request할때 secondbranch를 base로 하면된다. (하지만 실제 과제에서 다른 사람들이 하는 방식을 보면, secondbranch를 기준으로 final 브랜치를 파서 클론을 하고 pull request할땐 main(master)을 base로 했다! main으로 해도 merge만 안하면 코드 반영이 안되므로! )



  1. secondbranch를 base로 해서 pull request한 모습이다.
    https://github.com/jaeuu/pull-request-practice

여기서 Merge를 하게되면 final 브랜치에서 작업한 코드 내용이 secondbranch에 반영이 되어버리므로 하지말고 주의하자.




참고
https://inpa.tistory.com/entry/GIT-%E2%9A%A1%EF%B8%8F-%EA%B9%83%ED%97%99-PRPull-Request-%EB%B3%B4%EB%82%B4%EB%8A%94-%EB%B0%A9%EB%B2%95-folk-issue

post-custom-banner

0개의 댓글