development

Git 현재 분기 및 색상이있는 PS1 라인

big-blog 2020. 12. 31. 23:21
반응형

Git 현재 분기 및 색상이있는 PS1 라인


내 현재 PS1은 다음과 같습니다.

export PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '

현재 분기를 다른 색상으로 표시하려면 어떻게해야합니까?


다음과 같이 원하는 부분을 색상으로 감쌀 수 있습니다.

\e[0;32m -색상 설정 (이 경우 녹색)

\e[m -색상을 기본값으로 다시 설정

예를 들어, 다음은 현재 경로의 마지막 토큰 인 녹색과 $기본 색상으로 프롬프트를 설정합니다 .

export PS1='\e[0;32m\w\e[m $'

다른 색상도 사용할 수 있습니다. 포괄적 인 대안 목록을 보려면 색상 화 아래에 있는 이 기사를 참조하십시오 .


다음은 부분별로입니다 (Ruby 제외).

function color_my_prompt {
    local __user_and_host="\[\033[01;32m\]\u@\h"
    local __cur_location="\[\033[01;34m\]\w"
    local __git_branch_color="\[\033[31m\]"
    #local __git_branch="\`ruby -e \"print (%x{git branch 2> /dev/null}.grep(/^\*/).first || '').gsub(/^\* (.+)$/, '(\1) ')\"\`"
    local __git_branch='`git branch 2> /dev/null | grep -e ^* | sed -E  s/^\\\\\*\ \(.+\)$/\(\\\\\1\)\ /`'
    local __prompt_tail="\[\033[35m\]$"
    local __last_color="\[\033[00m\]"
    export PS1="$__user_and_host $__cur_location $__git_branch_color$__git_branch$__prompt_tail$__last_color "
}
color_my_prompt

다음과 같이 보입니다 (내 자신의 터미널 팔레트 포함).

컬러 프롬프트

또한, 볼 기사를.


내 PS1 라인은 다음과 같습니다.

\n\[\e[1;37m\]|-- \[\e[1;32m\]\u\[\e[0;39m\]@\[\e[1;36m\]\h\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(__git_ps1 " (%s)")\[\e[0;39m\] \[\e[1;37m\]--|\[\e[0;39m\]\n$

대체 텍스트


function pc {
  [ -d .git ] && git name-rev --name-only @
}
PS1='\e];\s\a\n\e[33m\w \e[36m$(pc)\e[m\n$ '

ps1

출처


이것은 내 PS1 솔루션입니다.

Novel 테마가있는 Mac에서 멋지게 보입니다. 미안하지만 들여 쓰기가 약간 엉망이되었습니다. 당신이 그것을 좋아할 때까지 해킹하십시오.

function we_are_in_git_work_tree {
    git rev-parse --is-inside-work-tree &> /dev/null
}

function parse_git_branch {
    if we_are_in_git_work_tree
    then
    local BR=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD 2> /dev/null)
    if [ "$BR" == HEAD ]
    then
        local NM=$(git name-rev --name-only HEAD 2> /dev/null)
        if [ "$NM" != undefined ]
        then echo -n "@$NM"
        else git rev-parse --short HEAD 2> /dev/null
        fi
    else
        echo -n $BR
       fi
    fi
}

function parse_git_status {
    if we_are_in_git_work_tree
    then
    local ST=$(git status --short 2> /dev/null)
    if [ -n "$ST" ]
    then echo -n " + "
    else echo -n " - "
    fi
    fi
}

function pwd_depth_limit_2 {
    if [ "$PWD" = "$HOME" ]
    then echo -n "~"
    else pwd | sed -e "s|.*/\(.*/.*\)|\1|"
    fi
}

COLBROWN="\[\033[1;33m\]"
COLRED="\[\033[1;31m\]"
COLCLEAR="\[\033[0m\]"

# Export all these for subshells
export -f parse_git_branch parse_git_status we_are_in_git_work_tree pwd_depth_limit_2
export PS1="$COLRED<$COLBROWN \$(pwd_depth_limit_2)$COLRED\$(parse_git_status)$COLBROWN\$(parse_git_branch) $COLRED>$COLCLEAR "
export TERM="xterm-color"

지점에서 체크 아웃 한 경우 지점 이름을 얻습니다.

방금 초기화 된 Git 프로젝트에있는 경우 '@'만 표시됩니다.

머리가없는 경우에는 이름 앞에 '@'가있는 일부 분기 또는 태그와 관련된 멋진 사람 이름을 얻게됩니다.

헤드리스이고 일부 브랜치 또는 태그의 조상이 아니라면 짧은 SHA1을 얻습니다.

또한 빨간색 '-'는 깨끗한 작업 디렉토리 및 색인을 의미하고 빨간색 '+'는 그 반대를 의미합니다.


내 강력한 멀티 라인 Linux 프롬프트!

.bashrc 또는 더 나은 위치에 넣으십시오. / etc / bash-prompt에 저장하고 .bashrc에서 소스를 얻으십시오.
tput을 사용하는 것이 색상을 수행하는 올바른 방법입니다.

#!/bin/bash

set_prompt()
{
   local last_cmd=$?
   local txtreset='$(tput sgr0)'
   local txtbold='$(tput bold)'
   local txtblack='$(tput setaf 0)'
   local txtred='$(tput setaf 1)'
   local txtgreen='$(tput setaf 2)'
   local txtyellow='$(tput setaf 3)'
   local txtblue='$(tput setaf 4)'
   local txtpurple='$(tput setaf 5)'
   local txtcyan='$(tput setaf 6)'
   local txtwhite='$(tput setaf 7)'
   # unicode "✗"
   local fancyx='\342\234\227'
   # unicode "✓"
   local checkmark='\342\234\223'
   # Line 1: Full date + full time (24h)
   # Line 2: current path
   PS1="\[$txtbold\]\[$txtwhite\]\n\D{%A %d %B %Y %H:%M:%S}\n\[$txtgreen\]\w\n"
   # User color: red for root, yellow for others
   if [[ $EUID == 0 ]]; then
       PS1+="\[$txtred\]"
   else
       PS1+="\[$txtyellow\]"   
   fi
   # Line 3: user@host
   PS1+="\u\[$txtwhite\]@\h\n"
   # Line 4: a red "✗" or a green "✓" and the error number
   if [[ $last_cmd == 0 ]]; then
      PS1+="\[$txtgreen\]$checkmark \[$txtwhite\](0)"
   else
      PS1+="\[$txtred\]$fancyx \[$txtwhite\]($last_cmd)"
   fi
   # Line 4: green git branch
   PS1+="\[$txtgreen\]$(__git_ps1 ' (%s)')\[$txtwhite\]"
   # Line 4: good old prompt, $ for user, # for root
   PS1+=" \\$ "
}
PROMPT_COMMAND='set_prompt'

For my Mac with the Homebrew theme, this works really well. Fully debugged and very fast, and completely self-contained. BONUS: Smart enough to ONLY show a git branch as part of the prompt when you're actually in a git repo! :)

# Color prompt for git
reset=$(tput sgr0)
boldgreen=$(tput setaf 2)$(tput bold)
cyan=$(tput sgr0)$(tput setaf 6)
boldred=$(tput setaf 1)$(tput bold)
boldwhite=$(tput setaf 7)$(tput bold)
boldyellow=$(tput setaf 3)$(tput bold)

PARENCLR=$'\001\e[0;36m\002'
BRANCHCLR=$'\001\e[1;33m\002'

alias branchname="git branch 2>/dev/null | sed -ne 's/^* \(.*\)/ ${PARENCLR}(${BRANCHCLR}\1${PARENCLR}\)/p'"

GIT_STATUS='$(branchname)'

PROMPT_CHAR="\$"
PS1="\[$boldgreen\]\u\[$cyan\]::\[$boldred\]\h \[$cyan\]{\[$boldwhite\].../\W\[$cyan\]}\[$reset\]$GIT_STATUS\[$reset\]$PROMPT_CHAR "

Here's what it looks like: Mac + Homebrew + Color Git Prompt

If you want to have the full path (or remove the .../), then just change the -W to -w (and remove the .../).


Just invoke tput with the appropriate parameters. See the tput(1) and terminfo(5) man pages.


Take a look at liquidprompt:

https://github.com/nojhan/liquidprompt

Maybe a bit too heavy for your requirements, but you can switch features off by setting

LP_ENABLE_...=0

See the documentation on above page.


git구문 분석 기능 을 추가하고 약간 다른 간격을 사용 하는 @cmcginty 프롬프트의 수정 된 버전 :

# So I know where I am in repos:
parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

# Modified from:
# https://stackoverflow.com/a/4138531/2662028
export PS1='\n\[\e[1;37m\]|-- \[\e[1;32m\]\u\[\e[0;39m\]@\[\e[1;36m\]\h\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(parse_git_branch " (%s)")\[\e[0;39m\] \[\e[1;37m\]--|\[\e[0;39m\]\n\$ '

이것은 또한 \$대신 프롬프트에서 사용하므로 루트 일 때 $얻을 #수 있습니다.


여기 내 꺼야

export PS1="\n\[\033[1;30m\][$$:$PPID - \j:\!\[\033[1;30m\]]\[\033[0;36m\] \T \
\[\033[1;30m\][\[\033[1;34m\]\u@\H\[\033[1;30m\]:\[\033[0;37m\]${SSH_TTY:-o} \
\[\033[0;32m\]+${SHLVL}\[\033[1;30m\]] \[\033[1;37m\]\w\[\033[0;37m\]\[\033[1;34m\]\$(__git_ps1 \" (%s)\") \[\033[0;37m\] \n\$ "

다음은 Windows / Cygwin / Bash 솔루션입니다.

~/.bashrc파일에 다음을 추가 하십시오.

xxx는 로컬 Git 저장소의 위치입니다.

GetBranch()
{
    cat /cygdrive/c/xxx/.git/HEAD | sed 's+^ref: refs/heads/++'
}
export PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[36m\]\$(GetBranch) \[\e[33m\]\w \[\e[0m\] \n\$ "

Git의 더 복잡한 상태를 위해 더 큰 스크립트를 사용할 수 있습니다 .

참조 URL : https://stackoverflow.com/questions/4133904/ps1-line-with-git-current-branch-and-colors

반응형