[Linux] Bash Shell에 git branch와 상태 표시

개요

쉘에서 Git을 쓰다보면 한번씩 불편한 경우가 있다. 직장에서 장비마다 같은 repository를 가지고 config만 다르게 빌드하다보니 동일한 repository를 여러개 받아놓고 쓰는데, 이때마다 이 폴더의 branch가 어디인지, 이전에 이 폴더에서 수정작업을 했었는지 종종 헷갈려서 실수하기도한다. 

 

현재 사용중인 git 폴더

위 사진은 현재 집에서 공부용으로 사용하는 폴더다. 지금 사용하는 쉘에는 branch의 정보가 나타나지않아 일일히 git branch를 해서 branch 정보를 확인해야한다. 그래서 이번 기회에 쉘 프롬프트에 아예 git branch 정보와 수정 이력을 나타나도록 하려고 한다.

 

쉘 프롬프트에 branch 정보 표시

parse_git_branch()
{
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
export PS1="\e[01;32m\u@\h \[\e[34m\]\w\[\e[33m\]\$(parse_git_branch)\[\e[00m\]$ "

vi ~/.bashrc 명령어를 통해 .bashrc파일에 들어간뒤, 다음과 같은 코드를 추가해준다.

git branch를 수행했을 때, 현재 branch의 이름을 가져올 수 있도록 parsh_git_branch()함수를 추가했다. PS1은 현재 프롬프트를 나타내주는 변수임으로 이를 적절히 수정하여 export 한다.

그 후, linux를 다시 실행하거나 source ~/.bashrc를 입력해준다.

변경된 쉘 프롬프트

그럼 위 사진과 같이 프롬프트에 branch의 정보가 나오게 된다. 그러나 이렇게 사용할 경우 내가  폴더의 내용을 수정 했는지 안했는지 알아보기 어렵다.

 

쉘 프롬프트에 폴더 수정 내역 표시

그렇다면 이번엔 branch 정보를 표시하면서 폴더의 수정 내역이 있을 경우 branch 이름을 빨간색으로, 그렇지 않다면 파란색으로 표시해주도록 수정한다.

parse_git_branch()
{
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
c_cyan=`tput setaf 6`
c_red=`tput setaf 1`
c_green=`tput setaf 2`
c_sgr0=`tput sgr0`
branch_color ()
{
   if git rev-parse --git-dir >/dev/null 2>&1
   then
      color=""
      if git diff --quiet 2>/dev/null >&2
      then
         color="${c_green}"
      else
         color=${c_red}
      fi
   else
      return 0
   fi
   echo -ne $color
}
export PS1='\e[01;32m\u@\h \[\e[34m\]\w\[${c_sgr0}\]\[$(branch_color)\]$(parse_git_branch)\[${c_sgr0}\]\$ '

.bashrc 파일에서 방금 작성했던 코드를 위와 같이 바꿔준다.

색을 적용해줄 변수를 추가하고 git diff의 결과에 따라 다르게 색을 표시해줄 수 있도록 branch_color 함수를 추가적으로 만들어준다.

그 후, PS1을 다시 적절히 수정하여 export 해준다.

 

 

적용된 쉘 프롬프트 확인

다시한번 source ~/.bashrc를 해주게 되면 아래 사진처럼 프롬프트가 변경된다.

변경된 프롬프트

아직은 폴더에 수정된 내용이 없기 때문에 프롬프트의 branch의 정보가 파란색으로 표시된다. 폴더의 내용이 수정되었을 때, 색이 빨간색으로 바뀌는지 확인해보기 위해 임의로 파일을 수정해보았다.

파일 수정 후 프롬프트

파일을 임의로 수정하자 프롬프트의 branch의 정보가 빨간색으로 잘 표시된다. 이를 통해 이제 git을 사용하는 폴더의 branch 정보와 파일 수정 내역을 좀 더 간편하게 확인 할 수 있게 되었다.

댓글