Pull Request 로컬에서 확인하기

RunFridge·2024년 5월 21일

cli-productivity

목록 보기
2/5

코드 리뷰

현재 회사에서는 Github에 Pull Request를 올리면 서로 코드 리뷰를 해주는 시스템으르 갖고 있다.

처음에는 Github의 Pull Request 화면에서 주어지는 UI들을 활용하여 Files Changed, Commits 등의 페이지를 확인해가며 코드리뷰를 하였다.

다만, 로컬 환경에서 특정 로직을 실행해보고 싶을때 코드를 복사해서 붙여넣어 실행하는건 매우 비표율적이라고 생각했다.

그래서 알게된것이 git-cli를 통해서 pull request의 코드를 fetch해 올 수 있다는 사실이였다!

# Github
git fetch ${remote-name} pull/${id}/head:${branch-name}

# Gitlab
git fetch ${remote-name} merge-requests/${id}/head:${branch-name}

위 커맨드를 사용하면 특정 Remote의 Pull Request 번호를 입력하면 특정 브랜치로 Pull Request를 받아올 수 있다!

.gitconfig

git에서는 ~/.gitconfig 파일에 git에 대한 전역설정을 할 수 있는 옵션이 있다.

우선 다음과 같은 alias를 추가하여 올라온 PR들에 대하여 즉시 브랜치를 fetch 받을 수 있도록 설정하였다.

; ~/.gitconfig
[alias]
	pr = !sh -c 'git fetch upstream pull/$1/head:pr-upstream-$1 && git checkout pr-upstream-$1' -

위 설정을 추가하게되면 git pr 145 커맨드를 통해 #145 Pull Request를 fetch하고, pr-upstream-145라는 브랜치를 생성 후 체크아웃한다.

더 편하게 만들어보자

fzf, gh 를 활용하면 더욱 편한 스크립트를 만들 수 있다.

#!/usr/bin/env bash

# Github CLI 설치여부 확인
if ! command -v gh &> /dev/null
then
    echo "이 스크립트를 실행하기 위해서는 Github-CLI가 필요합니다."
    exit
fi

# FZF 설치여부 확인
if ! command -v fzf &> /dev/null
then
    echo "이 스크립트를 실행하기 위해서는 fzf가 필요합니다."
    exit
fi

# Git 리포지토리 여부 확인
if ! git rev-parse --is-inside-work-tree &> /dev/null
then
    echo "Git 리포지토리가 아닙니다."
    exit
fi

# Github-CLI 로그인 여부 확인[
if ! gh auth status &> /dev/null
then
    echo "Github-CLI 로그인 상태가 아닙니다. gh auth login을 통해 로그인해주세요."
    exit
fi

# Upstream Remote 설정 여부 확인
if ! git remote get-url upstream &> /dev/null
then
    echo "Upstream remote가 지정 되지 않았습니다. git remote add로 추가해주세요."
    exit
fi

# 열린 Pull Request 목록 확인
pull_requests=$(gh pr list)

# FZF를 사용하여 PR 선택 (미리보기 표시)
pr_no=$(echo "$pull_requests" | fzf --preview 'gh pr view {1}' --preview-window=up:70%:wrap | awk '{print $1}')

if [[ -z "$pr_no" ]]
then
    echo "선택된 PR이 없습니다."
    exit 1
fi

# 지정된 PR Fetch
git fetch upstream pull/$pr_no/head:pr-upstream-$pr_no

# PR 브랜치 체크아웃
git checkout pr-upstream-$pr_no

데모

asciicast

0개의 댓글