Github Pull Request를 로컬에서 checkout하기

Github Pull Request를 로컬에서 checkout하기
git logo

개발 흐름에 Pull Request(PR)를 도입하면 코드 리뷰와 협업이 한층 수월해집니다. 그러나 때로는 이러한 PR을 로컬 환경에서 직접 실행하고 테스트해보고 싶을 때가 있습니다. 복잡해 보일 수 있는 이 과정을 간단하고 명확하게 해결할 수 있는 방법을 소개합니다.

원격 저장소에서 Pull Request 가져오기

GitHub는 원격 저장소의 Pull Request를 로컬로 가져올 수 있는 기능을 제공합니다. 이 과정은 PR을 올린 사람의 저장소에서 직접 가져오는 방식이며, GitHub 인터페이스에서 안내를 제공합니다.

Pull Request 브랜치의 존재

PR은 단순 링크가 아니며, 원격 저장소에 refs/pull/NUM/head라는 형태로 실제 브랜치가 존재합니다. 여기서 NUM은 PR의 번호를 의미합니다. 이를 활용하면 다음과 같이 로컬에 PR을 가져올 수 있습니다:

bashCopy codegit fetch origin pull/NUM/head:pr-NUM

이 명령은 origin 원격 저장소에서 pull/NUM/headpr-NUM라는 로컬 브랜치로 가져옵니다.

자동으로 Pull Request를 로컬에 가져오기

.git/config 활용하기

.git/config 파일을 조작하여 Pull Request를 자동으로 가져오는 방법이 있습니다. 일반적으로 clone을 실행하면 해당 저장소에 대한 정보가 이 파일에 등록됩니다. 이 파일에 fetch = +refs/pull/*/head:refs/remotes/origin/pr/*라는 패치 정보를 추가하면, Git에서 fetch할 때 원격 저장소의 모든 PR을 자동으로 가져오게 됩니다.

자동 업데이트의 편리함

원격 저장소의 PR을 자동으로 가져오면, 개발 서버에 PR을 적용하고 테스트하는 과정이 간단해집니다. 이 설정을 한 번 해두면, PR의 업데이트가 있을 때마다 자동으로 반영되므로 별도의 관리가 필요 없습니다.

.git/config 파일 보기 (전/후)

아마 vim .git/config 를 입력하면 다음처럼 작성이 되어 있을거예요:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = true
[remote "origin"]
        url = https://github.com/example.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
        remote = origin
        merge = refs/heads/main

그럼 다음과 같이 코드를 추가해줍니다:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = true
[remote "origin"]
        url = https://github.com/example.git
        fetch = +refs/heads/*:refs/remotes/origin/*
        fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
# 바로 윗줄과 같이 추가해주세요.
[branch "main"]
        remote = origin
        merge = refs/heads/main

축하 드립니다 !

이제 git pull 혹은 git fetch를 활용하여 pr에 올라온 브랜치들에 접근할 수 있어요. 🎉🎉