【注】~/.bashrc
是Linux的,对应到Mac OSX 是 ~/.bash_profile
,看网上的教程要注意区分和替换
1、执行以下命令,克隆官方git库,然后找到两个关键文件
git clone git@github.com:git/git.git
-
contrib/completion/git-completion.bash
自动补全 -
contrib/completion/git-prompt.sh
高亮显示当前分支名称
2、执行以下命令,将两个文件复制到用户目录,并设置隐藏
cp git-completion.bash ~/.git-completion.bash
cp git-prompt.sh ~/.git-prompt.sh
3、配置 ~/.bash_profile
文件,没有该文件就新增,然后加入以下内容
# git命令自动补全
source ~/.git-completion.bash
# git显示分支官方实现
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWCOLORHINTS=true
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
#GIT_PS1_SHOWUPSTREAM=auto
if [ -f ~/.git-completion.bash ]; then
source ~/.git-prompt.sh
PROMPT_COMMAND='__git_ps1 "[\t][\u@\h:\w]" "\\\$ "'
fi
4、执行以下命令进行刷新
source ~/.bash_profile
5、bingo,enjoy!
【PS:有一个大坑需要注意】
官方的 git-completion.bash
文件在 2289880f784326dc955f213072164539dcaf445e
提交节点下有问题,无法使用。折腾了好久,最后使用旧版的文件可以使用。
【2019.5.10更新:大坑已修复】
迄今为止最新的commit(01f8d78887d45dc10f29d3926d5cc52f78838846
)已经可以在(MacOS Mojave 10.14.4
) 下正常使用
【2020.4.22更新】
Mac OS Catalina 10.15.2 中,终端默认使用的shell脚本是zsh,不是bash。这会导致上面第4步执行失败,报错如下:
WARNING: this script is deprecated, please see git-completion.zsh
但是Git并没有兼容zsh,所以还是得用回bash。解决办法如下:
终端 --> 偏好设置 --> 通用 --> Shell的打开方式,选中【命令(完整的路径)】,设置为:/bin/bash
【2024.9.18更新】
git 已兼容 zsh,具体的 .zshrc
配置项如下:
# git 自动补全
zstyle ':completion:*:*:git:*' script ~/.zsh_fpath/.git-completion.zsh
fpath=(~/.zsh_fpath $fpath)
autoload -Uz compinit && compinit
# git 显示分支名,格式如下:
# [10:38:04][~/Documents/codes/github/fishhook][main +]$
# 设置方式参考:https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh
. ~/.git-prompt.sh
# 普通方式
# setopt PROMPT_SUBST ; PS1='[%*][%F{cyan}%~%f]$(__git_ps1 "[%s]")\$ '
# 速度快一点的方式
# __git_ps1 函数接收3个参数,$1 是 start_str,$2 是 end_str,$3 是 target_str
precmd () { __git_ps1 "[%*][%F{cyan}%~%f]" "$ " "[%s]" }
# __git_ps1 的控制变量,包括 显示未追踪文件、显示暂存区状态、显示颜色 等
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWCOLORHINTS=true
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
参考
1、GIT 自动补全命令,分支名 以及 高亮显示当前分支
2、修改 .bash_profile(mac) 或 .bashrc(linux) 让 terminal 能自动补全 git 命令、显示 git 分支等信息 (git-completion.bash 和 git-prompt.sh 放入 ~ 目录)
3、Mac下git命令自动补全