Shell中显示Git分支名

文章目录

  • 一、Windows下的msys2 bash
  • 二、Mac Bash

一、Windows下的msys2 bash

如果我们安装了git for windows,在使用git bash的时候,如果当前目录是Git管理的目录,则会在后面显示Git的当前分支名:
Shell中显示Git分支名_第1张图片
如果我们安装了msys2,则可以不用再安装git for windows,因为Git for windows也是使用的msys2中的mingw64,而且占用的空间还不小。
Shell中显示Git分支名_第2张图片
msys2中安装git直接使用下面的命令即可。

pacman -S git

但是这样安装后不能像Git for windows一样在bash中显示git管理目录的当前分支。
为了达到可以显示的目的,可以看看Git for windows是如何处理的。
以笔者安装的Git for window 64位版本,安装在C:\Program Files\Git为例进行说明。
在C:\Program Files\Git\etc\bash.bashrc中有这样一段脚本:

# If MSYS2_PS1 is set, use that as default PS1;
# if a PS1 is already set and exported, use that;
# otherwise set a default prompt
# of user@host, MSYSTEM variable, and current_directory
[[ -n "${MSYS2_PS1}" ]] && export PS1="${MSYS2_PS1}"
# if we have the "High Mandatory Level" group, it means we're elevated
#if [[ -n "$(command -v getent)" ]] && id -G | grep -q "$(getent -w group 'S-1-16-12288' | cut -d: -f2)"
#  then _ps1_symbol='\[\e[1m\]#\[\e[0m\]'
#  else _ps1_symbol='\$'
#fi
[[ $(declare -p PS1 2>/dev/null | cut -c 1-11) = 'declare -x ' ]] || \
  export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[35m\]$MSYSTEM\[\e[0m\] \[\e[33m\]\w\[\e[0m\]\n'"${_ps1_symbol}"' '
unset _ps1_symbol

# Uncomment to use the terminal colours set in DIR_COLORS
# eval "$(dircolors -b /etc/DIR_COLORS)"

# Fixup git-bash in non login env
shopt -q login_shell || . /etc/profile.d/git-prompt.sh

可以看到最后是调用了/etc/profile.d/git-prompt.sh,打开C:\Program Files\Git\etc\profile.d\git-prompt.sh,中间有一段脚本:

if test -f ~/.config/git/git-prompt.sh
then
	. ~/.config/git/git-prompt.sh
else
	PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]' # set window title
	PS1="$PS1"'\n'                 # new line
	PS1="$PS1"'\[\033[32m\]'       # change to green
	PS1="$PS1"'\u@\h '             # user@host
	PS1="$PS1"'\[\033[35m\]'       # change to purple
	PS1="$PS1"'$MSYSTEM '          # show MSYSTEM
	PS1="$PS1"'\[\033[33m\]'       # change to brownish yellow
	PS1="$PS1"'\w'                 # current working directory
	if test -z "$WINELOADERNOEXEC"
	then
		GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
		COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
		COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
		COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
		if test -f "$COMPLETION_PATH/git-prompt.sh"
		then
			. "$COMPLETION_PATH/git-completion.bash"
			. "$COMPLETION_PATH/git-prompt.sh"
			PS1="$PS1"'\[\033[36m\]'  # change color to cyan
			PS1="$PS1"'`__git_ps1`'   # bash function
		fi
	fi
	PS1="$PS1"'\[\033[0m\]'        # change color
	PS1="$PS1"'\n'                 # new line
	PS1="$PS1"'$ '                 # prompt: always $
fi

这段脚本从change to green那行开始就是Git for windows显示的提示。

我们把这段复制到msys2中的bashrc中去并稍作修改,在msys2的bash中输入:

vim ~/.bashrc

或者用Windows的其它工具比如Notepad打开也可以。
在文件的最后添加:

#显示Git的当前分支
PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]' # set window title
PS1="$PS1"'\[\033[32m\]'       # change to green
PS1="$PS1"'\u@\h '             # user@host
PS1="$PS1"'\[\033[35m\]'       # change to purple
PS1="$PS1"'$MSYSTEM '          # show MSYSTEM
PS1="$PS1"'\[\033[33m\]'       # change to brownish yellow
PS1="$PS1"'\w'                 # current working directory

GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
if test -f "$COMPLETION_PATH/git-prompt.sh"
then
	. "$COMPLETION_PATH/git-completion.bash"
	. "$COMPLETION_PATH/git-prompt.sh"
	PS1="$PS1"'\[\033[36m\]'  # change color to cyan
	PS1="$PS1"'`__git_ps1`'   # bash function
fi
	
PS1="$PS1"'\[\033[0m\]'        # change color
PS1="$PS1"'\n'                 # new line
PS1="$PS1"'# '                 # prompt: always #

然后重新打开bash即可。
Shell中显示Git分支名_第3张图片

现在可以把Git for Windows卸载掉了。

二、Mac Bash

Mac下在~/.bash_profile最后添加如下内容:

#显示Git的当前分支
PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]' # set window title
PS1="$PS1"'\[\033[32m\]'       # change to green
PS1="$PS1"'\u@\h '             # user@host
PS1="$PS1"'\[\033[35m\]'       # change to purple
PS1="$PS1"'$MSYSTEM '          # show MSYSTEM
PS1="$PS1"'\[\033[33m\]'       # change to brownish yellow
PS1="$PS1"'\w'                 # current working directory

GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
COMPLETION_PATH="$COMPLETION_PATH/share/git-core" # 这句话与Windows下的不一样,最重要的是要找对路径
if test -f "$COMPLETION_PATH/git-prompt.sh"
then
	. "$COMPLETION_PATH/git-completion.bash"
	. "$COMPLETION_PATH/git-prompt.sh"
	PS1="$PS1"'\[\033[36m\]'  # change color to cyan
	PS1="$PS1"'`__git_ps1`'   # bash function
fi
	
PS1="$PS1"'\[\033[0m\]'        # change color
PS1="$PS1"'\n'                 # new line
PS1="$PS1"'# '                 # prompt: always #

其中COMPLETION_PATH的路径一定要找正确,笔者的系统的绝对路径为:
Shell中显示Git分支名_第4张图片
设置后,重开Shell,进入一个Git源目录:
Shell中显示Git分支名_第5张图片
可以看到Git的分支名了。

你的关注、点赞、打赏是我写作的动力

你可能感兴趣的:(跨平台,macOS,MSYS2,git,bash,msys2,显示分支名称,shell)