mac에서 zsh 프롬프트에 git 저장소 이름 표시하기

박종배·2023년 10월 3일
0

개요

보통 아래와 같이 내가 사용하는 zsh 프롬프트는 agnoster 테마를 사용하며 k8s 클러스터, 네임스페이스, 현재 경로, 브랜치, 변화 유무를 나타냄.

그런데, 실무를 하다보면 여러 git을 사용할 때가 있는데 현재 어느 git에서 작업 중인지 헷갈릴 때가 있음. 이럴때 꼭 경로도 복잡해서 더 헷갈림. 그러므로 위에 zsh 프롬프트에 git 저장소 이름을 추가해보자.

방법

먼저, agnoster의 github에 가보면 아래와 같이 프롬프트 설정을 할 수 있다고 함.

적용

이제 prompt_git()를 수정해보자.

~/.zshrc에 prompt_context() 함수 추가

prompt_git() {
  local bg_color="yellow"
  local ft_color="black"

  if [ -d .git ] || git rev-parse --is-inside-work-tree &>/dev/null; then
    git_repo_name=$(basename "$(git rev-parse --show-toplevel 2>/dev/null)")
    git_branch_name=$(git symbolic-ref --short HEAD 2>/dev/null)
    [ -n "$(git status --porcelain 2>/dev/null)" ] && git_is_dirty="*"
  else
    bg_color="black"
  fi

  prompt_segment "$bg_color" "$ft_color" "$git_repo_name $git_branch_name$git_is_dirty"
}

위 코드의 내용은 다음과 같음. 현재 디렉토리가 git 저장소에 속한다면, git 명령어를 활용하여 git_repo_name, git_branch_name, git_is_dirty 변수에 각각 git 저장소 이름, 현재 branch 이름, 소스코드의 변경 사항이 있는지 유무를 변수로 선언함. 그리고 프롬프트에 git 정보를 표시할 때는 노란색 배경에 검은색 글씨를 쓰지만 만약, .git 폴더가 없다면 아무것도 하지 않고 배경은 검은색으로 변경함. 그리고 prompt_segment 함수를 사용해 앞서 정의한 변수들을 인자로 전달함.

확인

이제 새 터미널을 열어서 프롬프트를 확인해보자.

git이 있고 변경 사항이 있을 때

git이 있고 변경 사항이 없을 때

git이 없을 떄

위와 같이 잘 적용됐음.

profile
기록하는 엔지니어 되기 💪

0개의 댓글