186

我尝试在 bash 提示符下添加我当前正在处理(签出)的 git 分支,但没有成功。(同时保持显示活动目录/文件完整的当前路径)我家中有一个 .bashrc 文件,但我也看到很多人提到 .profile 文件..

4

14 回答 14

186

git 1.9.3 或更高版本:使用__git_ps1

Git 提供了一个名为 的 shell 脚本git-prompt.sh,其中包含一个__git_ps1函数

打印文本以添加到 bash PS1 提示符(包括分支名称)

它最基本的用法是:

$ __git_ps1
(master)

它还需要一个可选的格式字符串:

$ __git_ps1 'git:[%s]'
git:[master]

如何获得它

首先,将文件复制到某个地方(例如~/.git-prompt.sh)。

选项 1:使用文件系统上的现有副本。示例(Mac OS X 10.15):

$ find / -name 'git-prompt.sh' -type f -print -quit 2>/dev/null
/Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh

选项 2:从 GitHub拉取脚本。

接下来,将以下行添加到您的.bashrc/.zshrc:

source ~/.git-prompt.sh

最后,将您PS1的调用更改__git_ps1为命令替换:

重击:

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

Zsh:

setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '

混帐 < 1.9.3

但请注意,只有 git 1.9.3(2014 年 5 月)或更高版本允许您安全地显示该分支名称(!)

请参阅Richard Hansen ( )提交 8976500richardhansen

bash 和 zsh 都对 PS1 的值进行参数扩展命令替换和算术扩展。

PS1在以两个或三个参数模式运行时,不要在其中包含原始的、未转义的分支名称,而是构造PS1以引用包含分支名称的变量。

由于 shell 不会递归扩展,因此可以避免通过特制的分支名称执行任意代码,例如

'$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)'.

什么狡猾的头脑会命名这样的分支?;)(在 xkcd 中的妈妈旁边

更多示例

Still_dreaming_1在评论中报告:

如果您想要带有xterm(在我的.bashrc)中的颜色提示,这似乎很有效:

PS1='\[\e]0;\u@\h: \w\a\]\n${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\03‌​3[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ ' 

一切都是不同的颜色,包括树枝。

在 Linux Mint 17.3 Cinnamon 64 位中:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\]$(__git_ps1) \$ ' 
于 2014-07-12T19:16:12.047 回答
64

请按照以下步骤操作:(Linux)

编辑文件~/.bashrc,在其末尾输入以下行(如果是 Mac,文件将是~/.bash_profile

# Git branch in prompt.
parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \W\[\033[32m\]\$(parse_git_branch)\[\033[00m\] $ "

现在,启动新的终端窗口,并尝试进入任何 git-repo。将显示当前分支,并带有提示。

4 更多信息 - MAC/Linux

于 2016-02-05T07:27:31.973 回答
42

1-如果您没有bash-completion ... :sudo apt-get install bash-completion

2-编辑您的.bashrc文件并检查(或添加):

if [ -f /etc/bash_completion ]; then
  . /etc/bash_completion
fi

3- ...在您的提示行之前:(export PS1='$(__git_ps1) \w\$ '
__git_ps1显示您的 git 分支)

4-做source .bashrc

编辑 :

进一步阅读:不要重新发明轮子

于 2014-02-13T22:27:05.530 回答
30

以下是我如何配置提示以显示 Git 状态:

获取 git-prompt 脚本:

curl -o ~/.git-prompt.sh https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh

并自定义您的提示,在您的 .bashrc 文件中添加以下代码:

# Load Git functions
source ~/.git-prompt.sh

# Syntactic sugar for ANSI escape sequences
txtblk='\e[0;30m' # Black - Regular
txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple
txtcyn='\e[0;36m' # Cyan
txtwht='\e[0;37m' # White
bldblk='\e[1;30m' # Black - Bold
bldred='\e[1;31m' # Red
bldgrn='\e[1;32m' # Green
bldylw='\e[1;33m' # Yellow
bldblu='\e[1;34m' # Blue
bldpur='\e[1;35m' # Purple
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
unkblk='\e[4;30m' # Black - Underline
undred='\e[4;31m' # Red
undgrn='\e[4;32m' # Green
undylw='\e[4;33m' # Yellow
undblu='\e[4;34m' # Blue
undpur='\e[4;35m' # Purple
undcyn='\e[4;36m' # Cyan
undwht='\e[4;37m' # White
bakblk='\e[40m'   # Black - Background
bakred='\e[41m'   # Red
badgrn='\e[42m'   # Green
bakylw='\e[43m'   # Yellow
bakblu='\e[44m'   # Blue
bakpur='\e[45m'   # Purple
bakcyn='\e[46m'   # Cyan
bakwht='\e[47m'   # White
txtrst='\e[0m'    # Text Reset

# Prompt variables
PROMPT_BEFORE="$txtcyn\u@\h $txtwht\w$txtrst"
PROMPT_AFTER="\\n\\\$ "

# Prompt command
PROMPT_COMMAND='__git_ps1 "$PROMPT_BEFORE" "$PROMPT_AFTER"'

# Git prompt features (read ~/.git-prompt.sh for reference)
export GIT_PS1_SHOWDIRTYSTATE="true"
export GIT_PS1_SHOWSTASHSTATE="true"
export GIT_PS1_SHOWUNTRACKEDFILES="true"
export GIT_PS1_SHOWUPSTREAM="auto"
export GIT_PS1_SHOWCOLORHINTS="true"

如果你想了解更多,你可以在这里获取所有的点文件:https ://github.com/jamming/dotfiles

于 2015-03-12T21:12:04.657 回答
10

对于 mac,这非常有效:http ://martinfitzpatrick.name/article/add-git-branch-name-to-terminal-prompt-mac/ :

# Git branch in prompt.
parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

export PS1="\u@\h \W\[\033[32m\]\$(parse_git_branch)\[\033[00m\] $ "
于 2015-12-24T09:26:22.420 回答
5

首先,在您的主目录中打开您的 Bash 配置文件。使用默认编辑器打开和编辑bash_profile的最简单方法。

例如,我使用 VS Code 使用以下命令打开它:code .bash_profile。

然后只需将以下代码粘贴到您的 Bash 中。

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

export PS1="\u@\h \W\[\033[32m\]\$(parse_git_branch)\[\033[00m\] $ "

功能

parse_git_branch()

将获取分支名称,然后通过 PS1 您可以在终端中显示它。

这里,

\u = 用户名

@ = 静态文本

\h = 计算机名称

\w = 当前目录

$ = 静态文本

您可以更改或删除这些变量以进行更多自定义。


如果您在终端中第一次使用 Git,或者在配置后立即使用 Git,有时您可能看不到分支名称。

如果您遇到此问题,请不要担心。在这种情况下,只需创建一个示例存储库并在进行一些更改后提交它。当 commit 命令执行一次时,终端会从那时开始找到 git branch。


截图:终端中的 Git 分支

于 2019-04-17T00:56:30.330 回答
3
root:~/project#  -> root:~/project(dev)# 

将以下代码添加到 ~/.bashrc 的末尾

force_color_prompt=yes
color_prompt=yes
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt
于 2019-01-17T06:51:27.207 回答
2
vim ~/.bash

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $"

要反映最新更改,请运行以下命令

source ~/.bashrc

输出:-

chandrakant@NDL41104 ~/Chandrakant/CodeBase/LaravelApp (development) $
于 2018-04-24T13:56:33.553 回答
0

如果您使用鱼壳,则非常简单。fish 是一个带有很多好东西的交互式 shell。您可以使用apt-get.

sudo apt-get install fish

然后,您可以使用更改提示设置

> fish_config 
Web config started at 'http://localhost:8001/'. Hit enter to stop.
Created new window in existing browser session.

现在去http://localhost:8001/ 打开提示选项卡并选择经典+ git选项

在此处输入图像描述

现在点击使用提示按钮,你就设置好了。

于 2016-05-23T08:32:25.920 回答
0
parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]$(parse_git_branch)\n\$ '
于 2018-02-15T11:56:24.997 回答
0

按照以下步骤在 ubuntu 终端中显示您的 GIT 存储库的分支名称:

step1:打开终端并使用以下命令编辑 .bashrc。

六.bashrc

step2:在 .bashrc 文件末尾添加以下行:

parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' }

export PS1="\u@\h \W\[\033[32m\]\$(parse_git_branch)\[\033[00m\] $ "

step3:通过执行以下操作在根(主)目录中获取.bashrc:

/根文件夹:~$source .bashrc

Step4:重启并打开终端,查看cmd。导航到您的 GIt 存储库目录路径,您就完成了。:)

于 2018-04-19T07:55:40.090 回答
0

这是我使用的一个简单的干净版本:链接

在此处输入图像描述

于 2019-04-07T10:01:49.343 回答
0

我想要一个干净的解决方案,附加到现有提示而不是替换它。与其他解决方案一样,将其添加到 .bashrc 的底部

# function
parse_git_branch() {
  if [ -n "$(git rev-parse --git-dir 2> /dev/null)" ]; then
    echo "($(git rev-parse --abbrev-ref HEAD)) "
  fi
}

# environment customization
export PS1="$PS1\$(parse_git_branch)"

一个典型的设置会产生一个提示,看起来像

user@machine:/path/to/git/project$ (branch-name)

于 2021-11-09T02:11:27.133 回答
-1

我在 python 中尝试了一个位于 bin 文件夹中的小脚本......'gitprompt'文件

#!/usr/bin/env python
import subprocess, os
s = os.path.join(os.getcwd(), '.git')
def cut(cmd):
    ret=''
    half=0
    record = False
    for c in cmd:
        if c == "\n":
            if not (record):
                pass
            else:
                break
        if (record) and c!="\n":
            ret = ret + c
        if c=='*':
            half=0.5
        if c==' ':
            if half == 0.5:
                half = 1
        if half == 1:
            record = True
    return ret
if (os.path.isdir(s)):
    out = subprocess.check_output("git branch",shell=True)
    print cut(out)
else:
    print "-"

使其可执行和东西

然后相应地调整 bash 提示,如:

\u:\w--[$(gitprompt)] \$ 
于 2015-07-04T18:58:35.237 回答