왜 pull request를 위해 fork를 먼저 해야 하는 걸까?
왜 Pull Request를 검색하면 Fork를 우선적으로 하는 내용들만 나올까?
우선 공식문서에서 GitHub 프로젝트에 기여하는 방법에 대해 설명한 글을 읽어보자.
6.2 GitHub - GitHub 프로젝트에 기여하기
뭐 지금 당장 읽을 필요는 없어도 나중에 한 번쯤은 읽어보길 권한다.
결론부터 말하자면 저장소에 대한 접근 권한이 없는 경우 fork를 먼저 한 뒤 clone으로 작업을 하고 나서 pull request를 날리는 방법을 사용하기 때문이다.
여기서 핵심은 "접근 권한이 없음"이다.
(*공식문서에서는 push 권한이라고 설명하고 있다.)
좋다 특히 오픈소스 같은 것들에 기여를 하기 위해서는 fork를 통해 pull request를 날리는 것이 맞다.
하지만 협업을 하고 있는 와중에 굳이 접근권한에 제한을 두고 fork를 통해 pull request를 해야 하는 걸까?
마침 이직한 회사도 fork 없이 pull request를 사용하기에 한번 집에서 혼자 공부할 겸 정리해두고자 한다.
자 fork 없이 한번 해보자.
우선 당연히 github계정이 있어야 하니 있다고 가정하고 특정 저장소도 있다고 가정한다.
그리고 내 계정에 오랫동안 잠들어 있던 저장소를 가지고 테스트를 진행하였다.
다행히 한 번에 pull request를 날릴 수 있는 버튼이 생성되었다.
fork를 통해 pull request를 하는 방법과 없이 하는 방법을 정리해둔 친절한 블로그가 있어 많이 참고하였다.
1. 자신의 PC에 Repository를 Clone 한다.
git clone (저장소 url)
git clone 하는 방법은 그렇게 어렵지 않아서 pull request를 찾아보는 사람들에게는 이미 알고 있는 내용이라 생각된다.
2. branch 생성
이 pull request의 핵심은 branch이다.
# git switch -c [브랜치 명]
git switch -c feature/han
3. 수정 작업 후 add, commit, push
테스트를 위해 아무 파일이나 간단하게 수정을 한 뒤 add, commit을 해주자.
물론 2. branch 생성에서 생성한 브랜치를 가지고 작업을 할 것이다.
아까 2번에서 pull request의 핵심은 branch라고 하였는데,
push를 할 때 이 branch명을 명시해서 push를 진행해 줄 것이다.
git push origin feature/han
자 이렇게 push를 진행하게 되면 저 위에서 보여줬던 pull request 버튼이 생성되는 것을 확인할 수 있을 것이다.
4. pull request 요청하기
우선 base가 될 즉, 1. merge를 진행하게 될 branch를 선택해줘야 한다.
이건 테스트로 진행했기 때문에 main/master 브랜치뿐이라 main인 것이지 git flow 전략을 사용한다면 그에 걸맞은 브랜치가 있을 것이다. 상황에 따라 맞춰주면 된다.
그리고 당연히 2. 내용을 수정해 주어야 한다.
내부적으로 양식을 정해서 내용을 수정하면 될 것이고, 중요한 것은 골뱅이(@)로 merge 해달라고 호출한 부분이다.
마지막으로 우측에도 빨갛게 표시를 해둔 이유는 일반적인 경우라면 굳이 신경 쓸 필요는 없겠지만 뭐 저런 것도 있다? 정도는 알아두고 넘어가면 좋을 거 같아서 표시를 해두었다. 사실 1, 2번까지만 알고 있음 충분하다.
5. pull request 요청 확인 후 처리하기(처리는 merge 권한자만)
저건 나 혼자 생쇼를 했기 때문에 같은 계정으로 pull request 하고 merge까지 하는 것이다.
협업에서는 이렇지 않을 테니 참고만 해두고
위에를 살펴보면 main 브랜치에 feature/han을 merge 한다고 표시되어 있다.
그리고 아래에는 당연히 내용들과 호출한 대상이 표시되는 것을 볼 수 있다.
만약 merge 권한이 있다면 중간 부분처럼 코드 확인하고 Merge pull request를 통해 merge를 진행해 주면 된다.
코드 확인은 위에 Conversation/Commits/Checks/Files changed 탭을 통해 하면 된다.
6. Merge 완료
이렇게 Merge가 완료되었다.
역시 그냥 머리로만 알고 있는 것보다는 직접 해보는 게 깔끔하다.
정리는 좀 지저분하게 했는데, 좀 더 깔끔한 내용은 하단 참고 블로그를 참고하길 바란다.
혼자 pull request 테스트를 진행해 보니까
단지 fork라는 과정이 추가됐냐 아니냐 차이만 있고 그 과정은 동일한 것으로 판단된다.
댓글