63일차(1)/GitHub : Pull Request
- Pull Request 설명
- 팀 프로젝트를 대비해서 깃허브 연습하기
- 조장이 깃허브에 저장소를 하나 만들면, 나의 깃허브 저장소로 끌고 온다(fork)
- 최초 1회, 그 상태대로 가지고 온다.
- 이 포크된 것을 코딩하려면 내 로컬 저장소로 가져오기! (clone)
- 내 로컬 저장소에서 내 깃허브는 origin 이라는 이름을 가진다. 받아온 곳. 기원!
- 조장의 깃허브도 원격 저장소로 등록해놓아야 한다!(upstream)
- upstream : 최상위/상류 저장소라는 의미로 사용
- 처음에 최초 1회 1) fork, 2) clone, 3) upstream 저장소로 등록 하는 과정이 필요하다.
- 각각의 깃허브에 master 브랜치가 있다.
- upstream/master, origin/master, master (로컬 저장소)
- 추가로 프로젝트를 하려고 한다면(역할분담) 별도의 브랜치를 만들어서 작업한다.
- 내 작업을 upstream 저장소로 올릴 수는 없다. 내 깃허브가 아니니까!
- 내 깃허브(origin)에다가 push 한다. 그러면 origin에 브랜치가 추가된다.
- 새 브랜치(login)에서 3개의 commit을 했다고 치자.
- 내 깃허브에 push하고 나면 새 브랜치가 생긴다(origin이 트래킹하는 login 브랜치) 자동으로 만들어진다.
- 그러면 master , origin/master, login , origin/login 4개의 브랜치가 보인다.
- push 하면 자동으로 origin/login이 생기면서 깃허브를 트래킹한다.
- 여기까지 해두면 조장은 이것이 업데이트되었는지 모르기 때문에...
새 커밋, 새 작업내역이 있다는 것을 조장 깃허브에 알려야 한다.
- 이때 하는 것을 Pull Request 라고 한다. (사실상 merge를 요청하는 것이라고 생각하면 된다.)
- 조장에게 내용을 검토해주시고 Merge 해주세요~ 를 요청하는 것!
- 그러면 조장은 검토하고 master 브랜치에 merge한다.
(충돌이 발생할 수도 있는데, merge하는 사람이 판단해서 수정+merge하면 된다)
- Fast-Forward 또는 merge commit 으로 새롭게 master 브랜치가 업데이트된다.
- 그러면 이제 이것을 내 로컬 저장소로 받아와야 한다!!
- upstream/master 의 현 상태를 fetch 해온다.
- fetch+merge 해서 한번에 pull 할 수 있다.(내 local 의 master도 업데이트된 상태)
- 내 깃허브(origin)에 push 하기(초록색 화살표)
- 그러면 master 와 origin/master의 히스토리가 같아진다.
- 다 동일하게 업데이트 되고 나면 login 브랜치는 지워버려도 된다.
- 내 로컬에서 보면 이렇다.
- fetch, push 하는 저장소가 각각 다른 것이다.
- fetch upstream/master → master(local) 에 merge
- 내 master 브랜치는 오직!! 조장의 깃허브로부터 fetch 받아서 진행시켜야 한다.
- 다양한 작업을 하면서 에러가 발생할 수 있으므로 직접 master에서 commit 하지는 말기..
- 커밋은 새로 만든 해당 브랜치에만 쌓는다!
- merge 되려면 내 깃허브에 올려서 조장에게 requerst 를 날리면 된다.
- master에서 커밋하지 말 것! 별도의 브랜치를 사용해서 사고를 방지한다.
- fetch 할 때는 내 워킹트리는 깨끗이 만들어놓고 받아야 한다. 커밋한 직후에! (충돌 방지)
- 복제해서 가져오기- fork 기능 사용. 깃허브에 로그인해야만 사용할 수 있음!
(clone 기능은 로그인하지 않아도 사용 가능)
- 이렇게 저장소를 내 깃허브에 가지고 왔다. 원하는 위치에 clone하기!
- git clone + 저장소 위치 복사한 것을 붙여넣기하면 이렇게 내 파일시스템(local)에 클론되어 나온다
- 이클립스에서 import하기
- 우측상단 깃환경으로 들어가기
- 이클립스에게 새로운 깃 저장소를 알려주기 (Add Existing Local git repo)
- 클론했던 폴더로 경로 지정하고, 깃 저장소를 찾아서 add 하면 된다.
- 클론만 했는데도 2개의 마스터 브랜치가 존재하게 되었다.
- 로컬의 master , origin의 master
- 워킹트리 폴더 안에 저장소 폴더가 있다.
- 프로젝트 폴더를 마우스 우클릭하면 import project 가 있다.
- 선택해서 finish
- java 웹 환경으로 돌아가면 해당 프로젝트가 들어와 있는 것을 볼 수 있다.
- 새로운 작업을 하기 전에는 Branch를 만들어야한다. (Team-Switch to-new branch)
- 뭔가 새로운 작업을 하고 commit 하기
- 가급적 commit+push 를 바로 하지 말기. 단위 기능을 완성시키고 각각의 commit을 모아서 push하기
- 전체적으로 큰 기능이 하나 완성되면! 그때 push하는 것이 좋다.
- 다시 깃환경에서,
- 아직 내 local은 조장의 저장소(upstream)을 알지 못한다. 추가해주어야 한다.
- 조장의 저장소 위치를 복사해서 remote 에 추가하기l
- 이름은 upstream으로, fetch 할 경로로 지정.
- change를 눌러서 저장소의 소스 등록
- 이 상태로 save 하면 된다.
- 그러면 upstream 이라는 이름으로 저장된다.
- 아직 push하지 않아서 origin/master에는 업데이트가 되어 있지 않다.
- 해당 로컬 hello 브랜치에서 마우스 우클릭해서 push
- 그러면 remote tracking 브랜치에도 이렇게 새 브랜치가 생겨난다.
- 깃허브에 들어가보면 pull request 하겠느냐고 나온다.
- 들어가면 메모와 함께 조장에게 PR을 보낼 수 있다.
- 내 로컬은 merge가 된것을 알지 못한다.
- merge할 때는 항상 워킹트리가 깨끗한 상태에서 움직이기! checkout 할 때도 반드시 확인!
- checkout 해서 master 브랜치로 옮겨간다음 → upstream으로부터 내려받아서 merge시켜야 한다.
- upstream/master 를 가져와서 fetch 하고
upstream/mater가 생겨나면 내 master와 merge 하기
- 새롭게 이것이 생겨난다. fetch 만 해서는 작업 창에서 볼 수 없다. master로 merge해야 한다.
- merge 할 브랜치에 우클릭해서 Merge 선택
- 내가 현재 master 브랜치에 있는 상태였어야 된다!
- 여기까지 완료하고 나면 작업했던 hello 브랜치는 우클릭-delete 해버리면 된다.
- 현재 merge된 작업이 내 깃허브(origin)에는 아직 올라가지 않았다.
- origin-push 하면 된다.
- 내려받아서(fetch) → local 저장소에서 보고 → origin에 push 하는 것 기억!
- master branch에 커밋하지 말기! 새 브랜치를 만들어서 작업하기
- 이렇게 전체 브랜치의 최종 커밋이 일치되도록 해주고 나서,
또 새로운 브랜치를 만들어서 작업하면 된다.
- Pull Request 를 보냈는데 만약 reject 된다면?
- 새 브랜치를 생성해서 새 작업을 한 후 → commit - push(내 깃허브/origin) → pull request 보내기
- PR을 받은 사람이 reject하면 해당 요청이 closed 된 것을 볼 수 있다.
- 그러면 기능을 고쳐서 다시 수정하고, 내 깃허브에 commit+push 후 재요청하면 된다.
- 상단 pull request 메뉴로 들어가서 직접 상대의 깃허브로 보내주면 된다.
- 조장이 merge해주면 master 브랜치로 checkout 하고
- upstream/master에서 다시 fetch 하기
- 그럼 여기 이렇게 최종 merge된 commit이 들어온다.
- 이것을 내 로컬 저장소에 merge 해주고,
merge 완료되면 본인의 깃허브에 push 하면 된다.
- 깃허브 push까지 완료되면 브랜치 삭제. 깃허브에서도 브랜치 삭제해주기!
- 내 로컬의 master 브랜치에 직접 commit하지 말 것!
- 내 local master 브랜치는 오직 조장으로부터 받아서만 업데이트 되는 것이라고 생각하기.
'국비교육(22-23)' 카테고리의 다른 글
64일차(1)/Spring Boot(13) : static 폴더 활용하기 (0) | 2023.01.06 |
---|---|
63일차(2)/Spring Boot(13) : Boot에서 war파일 생성(3) (0) | 2023.01.05 |
62일차(1)/Spring Boot(12) : 로그인 폼 css추가, 로그인정보 저장 기능 구현 (1) | 2023.01.05 |
61일차(2)/Spring Boot(11) : 파일 저장경로 수정, 에러 페이지 응답 기능 구현 (0) | 2023.01.03 |
61일차(1)/Spring Boot(10) : file, gallery 게시판 파일 저장경로, 다운로드 기능 수정 / Boot 기능 활용 (0) | 2023.01.03 |