我一直在观看Team Treehouse的一些视频,他们在与Git合作时拥有一个非常好看的终端。
例如,他们有(类似的):
mike@treehouseMac: [/Work/test - feature-branch-name] $ git add .
mike@treehouseMac: [/Work/test - feature-branch-name] $ git commit -m "Some feature."
mike@treehouseMac: [/Work/test - feature-branch-name] $ git checkout master
mike@treehouseMac: [/Work/test - master] $ git status
我的终端如何向我展示一些关于我所在分支的有用信息,用颜色来区分我想要的数据位?是否有某种我尚未找到的事实上的插件?
我正在使用Mac OSX 10.8
答案 0 :(得分:59)
这不是一个插件。这是关于shell的快速技巧。
要在bash中进行酷炫的设置,请查看此人的dotfiles
项目:
https://github.com/mathiasbynens/dotfiles
要获得精彩的提示,请在.bash_prompt
或~/.bash_profile
中加入~/.bashrc
。
要获得与问题完全相同的提示,请更改export PS1
末尾的.bash_prompt
行,如下所示:
export PS1="\[${BOLD}${MAGENTA}\]\u\[$WHITE\]@\[$ORANGE\]\h\[$WHITE\]: [\[$GREEN\]\w\[$WHITE\]\$([[ -n \$(git branch 2> /dev/null) ]] && echo \" - \")\[$PURPLE\]\$(parse_git_branch)\[$WHITE\]] \$ \[$RESET\]"
我最近在一个月前使用了此存储库中的所有.bash*
文件,这对我来说非常有用。
对于Git,.gitconfig
还有额外的好处。
由于你是一个mac用户,.osx
还有更多好东西。
答案 1 :(得分:50)
简单方法
在您喜欢的编辑器中打开~/.bash_profile
,并将以下内容添加到底部。
提示中的Git分支。
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w - \$(parse_git_branch)\[\033[00m\] $ "
答案 2 :(得分:27)
要扩展现有的优秀答案,一个非常简单的方法就是使用开源的 Dotfiles 项目。
https://github.com/mathiasbynens/dotfiles
在OSX和Linux上安装很简单。在终端中运行以下命令。
git clone https://github.com/mathiasbynens/dotfiles.git && cd dotfiles && source bootstrap.sh
这将是:
cd
进入文件夹。答案 3 :(得分:11)
我的提示包括:
rsync
- 样式user@host:pathname
用于复制粘贴善良#
# Set the prompt #
#
# Select git info displayed, see /usr/share/git/completion/git-prompt.sh for more
export GIT_PS1_SHOWDIRTYSTATE=1 # '*'=unstaged, '+'=staged
export GIT_PS1_SHOWSTASHSTATE=1 # '$'=stashed
export GIT_PS1_SHOWUNTRACKEDFILES=1 # '%'=untracked
export GIT_PS1_SHOWUPSTREAM="verbose" # 'u='=no difference, 'u+1'=ahead by 1 commit
export GIT_PS1_STATESEPARATOR='' # No space between branch and index status
export GIT_PS1_DESCRIBE_STYLE="describe" # detached HEAD style:
# contains relative to newer annotated tag (v1.6.3.2~35)
# branch relative to newer tag or branch (master~4)
# describe relative to older annotated tag (v1.6.3.1-13-gdd42c2f)
# default exactly eatching tag
# Check if we support colours
__colour_enabled() {
local -i colors=$(tput colors 2>/dev/null)
[[ $? -eq 0 ]] && [[ $colors -gt 2 ]]
}
unset __colourise_prompt && __colour_enabled && __colourise_prompt=1
__set_bash_prompt()
{
local exit="$?" # Save the exit status of the last command
# PS1 is made from $PreGitPS1 + <git-status> + $PostGitPS1
local PreGitPS1="${debian_chroot:+($debian_chroot)}"
local PostGitPS1=""
if [[ $__colourise_prompt ]]; then
export GIT_PS1_SHOWCOLORHINTS=1
# Wrap the colour codes between \[ and \], so that
# bash counts the correct number of characters for line wrapping:
local Red='\[\e[0;31m\]'; local BRed='\[\e[1;31m\]'
local Gre='\[\e[0;32m\]'; local BGre='\[\e[1;32m\]'
local Yel='\[\e[0;33m\]'; local BYel='\[\e[1;33m\]'
local Blu='\[\e[0;34m\]'; local BBlu='\[\e[1;34m\]'
local Mag='\[\e[0;35m\]'; local BMag='\[\e[1;35m\]'
local Cya='\[\e[0;36m\]'; local BCya='\[\e[1;36m\]'
local Whi='\[\e[0;37m\]'; local BWhi='\[\e[1;37m\]'
local None='\[\e[0m\]' # Return to default colour
# No username and bright colour if root
if [[ ${EUID} == 0 ]]; then
PreGitPS1+="$BRed\h "
else
PreGitPS1+="$Red\u@\h$None:"
fi
PreGitPS1+="$Blu\w$None"
else # No colour
# Sets prompt like: ravi@boxy:~/prj/sample_app
unset GIT_PS1_SHOWCOLORHINTS
PreGitPS1="${debian_chroot:+($debian_chroot)}\u@\h:\w"
fi
# Now build the part after git's status
# Highlight non-standard exit codes
if [[ $exit != 0 ]]; then
PostGitPS1="$Red[$exit]"
fi
# Change colour of prompt if root
if [[ ${EUID} == 0 ]]; then
PostGitPS1+="$BRed"'\$ '"$None"
else
PostGitPS1+="$Mag"'\$ '"$None"
fi
# Set PS1 from $PreGitPS1 + <git-status> + $PostGitPS1
__git_ps1 "$PreGitPS1" "$PostGitPS1" '(%s)'
# echo '$PS1='"$PS1" # debug
# defaut Linux Mint 17.2 user prompt:
# PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\] $(__git_ps1 "(%s)") \$ '
}
# This tells bash to reinterpret PS1 after every command, which we
# need because __git_ps1 will return different text and colors
PROMPT_COMMAND=__set_bash_prompt
答案 4 :(得分:5)
对于正在macOS Catalina(10.15)中寻找操作方法的人(这是不赞成使用bsh推荐使用zsh),这是我的.zshrc文件:
parse_git_branch() {
git branch 2> /dev/null | sed -n -e 's/^\* \(.*\)/[\1]/p'
}
COLOR_DEF=$'\e[0m'
COLOR_USR=$'\e[38;5;243m'
COLOR_DIR=$'\e[38;5;197m'
COLOR_GIT=$'\e[38;5;39m'
NEWLINE=$'\n'
setopt PROMPT_SUBST
export PROMPT='${COLOR_USR}%n@%M ${COLOR_DIR}%d ${COLOR_GIT}$(parse_git_branch)${COLOR_DEF}${NEWLINE}%% '
答案 5 :(得分:2)
系统上安装的git包中包含bash文件,可帮助您创建信息提示。要创建颜色,您需要在提示符中插入终端转义序列。并且,最后一个要素是在使用内置变量PROMPT_COMMAND执行每个命令后更新提示符。
编辑你的〜/ .bashrc以包含以下内容,你应该在你的问题中得到提示,以模拟一些颜色差异。
#
# Git provides a bash file to create an informative prompt. This is its standard
# location on Linux. On Mac, you should be able to find it under your Git
# installation. If you are unable to find the file, I have a copy of it on my GitHub.
#
# https://github.com/chadversary/home/blob/42cf697ba69d4d474ca74297cdf94186430f1384/.config/kiwi-profile/40-git-prompt.sh
#
source /usr/share/git/completion/git-prompt.sh
#
# Next, we need to define some terminal escape sequences for colors. For a fuller
# list of colors, and an example how to use them, see my bash color file on my GitHub
# and my coniguration for colored man pages.
#
# https://github.com/chadversary/home/blob/42cf697ba69d4d474ca74297cdf94186430f1384/.config/kiwi-profile/10-colors.sh
# https://github.com/chadversary/home/blob/42cf697ba69d4d474ca74297cdf94186430f1384/.config/kiwi-profile/40-less.sh
#
color_start='\e['
color_end='m'
color_reset='\e[0m'
color_bg_blue='44'
#
# To get a fancy git prompt, it's not sufficient to set PS1. Instead, we set PROMPT_COMMAND,
# a built in Bash variable that gets evaluated before each render of the prompt.
#
export PROMPT_COMMAND="PS1=\"\${color_start}\${color_bg_blue}\${color_end}\u@\h [\w\$(__git_ps1 \" - %s\")]\${color_reset}\n\$ \""
#
# If you find that the working directory that appears in the prompt is ofter too long,
# then trim it.
#
export PROMPT_DIRTRIM=3
答案 6 :(得分:2)
只需按照this link中所述安装oh-my-zsh
插件。
它在macOS和Linux上效果最佳。
基本安装
哦,通过在终端中运行以下命令之一来安装My Zsh。您可以使用curl
或wget
通过命令行安装。
通过卷曲
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
通过wget
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
答案 7 :(得分:1)
有很多PS1生成器,但是ezprompt的状态也为git(第二个标签为“状态元素”)。
答案 8 :(得分:1)
在2019年,我认为git branch --show-current
比接受的答案更好。
$ git branch --show-current
master
(已在2019年6月的git 2.22版本中添加)
由于不需要遍历所有分支,因此运行速度更快。同样,在命令提示符中也应避免使用git branch
,因为如果您有许多本地分支,它会降低提示符的速度。
将其置于函数中以在命令提示符下的任何位置使用:
# This function returns '' in all below cases:
# - git not installed or command not found
# - not in a git repo
# - in a git repo but not on a branch (HEAD detached)
get_git_current_branch() {
git branch --show-current 2> /dev/null
}
更多上下文:
$ git version
git version 2.23.0
答案 9 :(得分:0)
基于6LYTH3的回答,由于有些改进可能会派上用场,因此我决定发布自己的答案:
简单的解决方案
打开~/.bash_profile
并添加以下内容
# \[\e[0m\] resets the color to default color
reset_color='\[\e[0m\]'
# \[\033[33m\] sets the color to yellow
path_color='\[\033[33m\]'
# \e[0;32m\ sets the color to green
git_clean_color='\[\e[0;32m\]'
# \e[0;31m\ sets the color to red
git_dirty_color='\[\e[0;31m\]'
# determines if the git branch you are on is clean or dirty
git_prompt ()
{
# Is this a git directory?
if ! git rev-parse --git-dir > /dev/null 2>&1; then
return 0
fi
# Grab working branch name
git_branch=$(git branch 2>/dev/null| sed -n '/^\*/s/^\* //p')
# Clean or dirty branch
if git diff --quiet 2>/dev/null >&2; then
git_color="${git_clean_color}"
else
git_color="${git_dirty_color}"
fi
echo " [$git_color$git_branch${reset_color}]"
}
export PS1="${path_color}\w\[\e[0m\]$(git_prompt)\n"
这应该:
1) Prompt the path you're in, in color: path_color.
2) Tell you which branch are you.
3) Color the name of the branch based on the status of the branch with git_clean_color
for a clean work directory and git_dirty_color for a dirty one.
4) The brackets should stay in the default color you established in your computer.
5) Puts the prompt in the next line for readability.
您可以使用此list
自定义颜色复杂的解决方案
另一种选择是使用Git Bash Prompt,并安装this。我在Mac OS X上通过Homebrew使用了该选项。
git_prompt_list_themes
看主题,但是我不喜欢其中任何一个。
git_prompt_color_samples
查看可用颜色。
git_prompt_make_custom_theme [<Name of base theme>]
创建一个新的自定义主题,这应该创建一个.git-prompt-colors.sh文件。
subl ~/.git-prompt-colors.sh
打开git-prompt-colors.sh并自定义:
根据我的自定义要求,.git-prompt-colors.sh文件应如下图所示
override_git_prompt_colors() {
GIT_PROMPT_THEME_NAME="Custom"
# Clean or dirty branch
if git diff --quiet 2>/dev/null >&2; then
GIT_PROMPT_BRANCH="${Green}"
else
GIT_PROMPT_BRANCH="${Red}"
fi
}
reload_git_prompt_colors "Custom"
希望这对您有帮助,祝您度过愉快的一天!
答案 10 :(得分:0)
从Mac OS Catalina .bash_profile替换为.zprofile
步骤1: 创建一个.zprofile
touch .zprofile
第2步:
nano .zprofile
在此行下面输入
source ~/.bash_profile
并保存(ctrl + o返回ctrl + x)
步骤3: 重新启动终端
添加Git分支名称 现在,您可以在.bash_profile中添加以下行
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w - \$(parse_git_branch)\[\033[00m\] $ "
重新启动终端,这将起作用。
注意: 即使您可以将.bash_profile重命名为.zprofile也可以。
答案 11 :(得分:0)
保持快速,简单
将其放入您的~/.bashrc
文件中。
git_stuff() {
git_branch=$(git branch --show-current 2> /dev/null)
if [[ $git_branch == "" ]];then
echo -e ""
elif [[ $git_branch == *"Nocommit"* ]];then
echo -e "No commits"
else
echo -e "$git_branch"
fi
}
prompt() {
PS1="\e[2m$(date +%H:%M:%S.%3N) \e[4m$(git_stuff)\033[0m\n\w$ "
}
PROMPT_COMMAND=prompt
然后source ~/.bashrc
答案 12 :(得分:0)
对于Mac Catilina 10.15.5和更高版本:
添加〜/ .zshrc文件
function parse_git_branch() {
git branch 2> /dev/null | sed -n -e 's/^\* \(.*\)/[\1]/p'
}
setopt PROMPT_SUBST
export PROMPT='%F{grey}%n%f %F{cyan}%~%f %F{green}$(parse_git_branch)%f %F{normal}$%f '
答案 13 :(得分:0)
对于仍在寻找这个的人,我刚刚安装了 ohmyz https://ohmyz.sh/#install 和它显示的分支
答案 14 :(得分:0)
在新的 Catalina OS for Mac 中,您需要更改
System Preference -> Users & Groups -> Right click user user
-> Advanced Option -> Login shell -> /bin/bash
如下写入.bash_profile并重启系统
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ \1/'
}
export PS1="\W\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "
输出:FolderName BranchName $