fork 저장소 관리

kldaji·2021년 8월 26일
0

서론

쓰기 권한이 없는 외부 repo 에 코드를 작성하고 싶다면 해당 repo 를 fork 해서 본인의 remote repo 로 가져오는 것은 개발자라면 알고 있을 것이라고 생각한다. 이번 포스팅에서 중점적으로 다룰 내용은 권한이 없는 외부 repo 와 remote repo, local 관리에 대해 다룰 것이다.

본론

외부 repo branch 생성

외부 repo 에 접근 권한이 없다면 당연히 branch 생성 권한도 없을 것이다. 그렇기 때문에 본인의 github 아이디와 동일한 이름 (어떤 이름이든 상관없긴하다.) branch 생성 요청을 한다. (branch 생성 요청에 대해서는 여기서 다루지 않겠다.)

fork

branch 가 생성된 것을 확인했으면 외부 repo 를 본인의 remote repo 로 fork 한다.

clone

이제 코드를 작성하면 되는데 remote repo 에 직접 코드를 작성할 순 없다. 코드 작성을 위해선 local 에 clne 명령을 해주면 되는데 이때 fork 한 repo 에는 모든 branch 가 전부 fork 되기 때문에 아래 명령어를 참고하여 single branch 만 clone 이 되도록 하자.

git clone {https remote repo 주소} -b {branch name} --single-branch

branch

여기까지 왔으면 코드 작성을 위한 모든 준비가 거의 다 끝났다. 한 가지 더 해주어야 할 점이 있는데 정말 중요하니 꼭 꼭 명심하도록 하자.
보통 개인 프로젝트를 진행하는 개발자나 개발에 입문한지 얼마 안된 개발자들은 main(master) branch 에서 작업을 진행하는데 이번 포스팅은 앞서 언급했듯이 외부 repo 를 fork 해서 remote repo, local 을 관리하는 것이다. 우리의 목표를 local 에서 코드 작성을 하고 commit, push 를 진행해 remote repo 에 올려주고 해당 작업들을 외부 repo 에 pull request 를 보내면 외부 repo 관리자는 pull request 확인해서 해당 repo (외부 repo) 에 merge 를 하게 되고, merge 된 내용을 다시 본인의 remote repo 로 가져와서 local 에 pull 한 뒤 지속적으로 contribute 를 하는 것이다.
이 과정에서 main(master) branch 하나로 진행한다면 외부 repo 의 commit hash 값과 본인의 remote repo 의 commit hash 값이 달라져 또 다른 작업들을 pull request 후 merge 하게 되면 merge conflict 가 발생해난관을 겪게 될 것이다. 좀 더 자세한 내용은 필자의 블로그에 포스팅 해놨으니 참고하면 좋겠다.
결국 필자가 하고 싶은 말은 작업은 항상 branch 를 생성하여 새로운 commit 을 쌓도록 진행하고, pull request 후 merge 가 되면 main(master) 에 fetch, rebase 명령어를 통해 동기화를 시키고 다시 branch 를 생성해 반복적으로 contribute 를 하면 되겠다.

commit & push

앞서 branch 를 생성해야 하는 이유에 대해 언급하다보니 전반적인 process 에 대해 간략히 설명을 드렸는데 그래도 각 단계에 대해 이어서 작성해보고자 한다.
remote repo 코드 작성을 위해 clone 을 하고 branch 를 생성하게 되면 본격적인 코드 작성을 하면 된다. 원하는 작업을 진행하면 해당 내용들을 remote repo 에 올려주어야 하는데 commit & push 명령어 이다. git 을 써봤더라면 해당 명령어는 이해하고 있을테니 넘어가도록 하겠다.

pull request

하루 또는 몇 일 단위로 작업을 완료했다면 외부 repo 에 pull request 를 보내 contribute 를 해야한다. 이때 주의할 점은 외부 repo 의 branch 와 remote repo 의 branch 가 동일한 상태에서 pull request 보내는게 일반적이다.

merge & fetch & rebase

외부 repo 관리자가 본인의 pull request 를 승인했다면 (repo 설정에 따라 자동 merge 가 되는 경우도 있다.) 외부 repo 의 본인의 branch 에 pull request 내용이 merge 가 되고 이제 merge 된 내용을 local 의 main(master) branch 에 가져와야 한다. 이 과정은 fetch 를 통해 upstream (외부 repo) branch 를 참조하고 rebase 를 통해 local 에 동기화 시킬 수 있다.
이후에는 다시 새로운 branch 를 생성해서 반복적으로 작업을 진행하면 된다.

결론

fetch, rebase 명령어에 익숙하지 않아 좀 더 공부를 해봐야겠지만 fetch, rebase 말고도 pull 가 fetch + merge 의 기능을 함축하고 있어 pull 명령어로도 fork 저장소 관리를 할 수 있다고 한다. 정말 repo 관리에는 정답이 없다고 생각한다. 개발자 본인이 잘 판단해야 하는 부분이 크기에 꾸준히 공부해야겠다.

fork 저장소 관리 과정에 대해 이해를 했으니 오늘도 필자는 성장했다.

profile
다양한 관점에서 다양한 방법으로 문제 해결을 지향하는 안드로이드 개발자 입니다.

0개의 댓글