在Bash命令提示符下添加git branch

时间:2013-04-08 15:41:57

标签: git bash ubuntu

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

13 个答案:

答案 0 :(得分:147)

请注意,此类提示现在由contrib/completion/git-prompt.sh及其__git_ps1_branch_name变量管理。

  
      
  • 将此文件复制到某处(例如~/.git-prompt.sh)。
  •   
  • 将以下行添加到.bashrc/.zshrc
  •   
  source ~/.git-prompt.sh
  
      
  • 将您的PS1更改为__git_ps1作为命令替换:
  •   
  Bash: 
  PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
  ZSH:  
  setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '

但请注意,只有git 1。9。3(2014年5月)or later允许您安全地显示该分支名称(!)

commit 8976500Richard Hansen (richardhansen)

  

bash和zsh都将PS1的值置于参数扩展命令替换和算术扩展。

     

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

     

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

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

什么狡猾的头脑会这样命名? ;)(Beside a Mom as in xkcd


still_dreaming_1举报in the comments

  

如果你想要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) \$ ' 

答案 1 :(得分:49)

按照以下步骤操作:(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 More Info - MAC/Linux

答案 2 :(得分:35)

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

编辑:

进一步阅读:Don’t Reinvent the Wheel

答案 3 :(得分:20)

以下是我如何配置提示以显示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

答案 4 :(得分:7)

对于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\] $ "

答案 5 :(得分: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) $

答案 6 :(得分:1)

webpack --optimize-minimize --mode production

答案 7 :(得分:1)

At first, open your Bash Profile in your home directory. The easiest way to open & edit your bash_profile using your default editor.

For example, I open it using the VS Code using this command: code .bash_profile.

Then just paste the following codes to your 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\] $ "

The function

parse_git_branch()

will fetch the branch name & then through PS1 you can show it in your terminal.

Here,

\u = Username

@ = Static Text

\h = Computer Name

\w = Current Directory

$ = Static Text

You can change or remove these variables for more customization.


If you use Git for the first time in terminal or instantly after configuration, maybe sometimes you can not see the branch name.

If you get this problem, don't worry. In that case, just make a sample repository and commit it after some changes. When the commit command will execute once, the terminal will find git branch from then.


Screenshot: Git Branch in Terminal

答案 8 :(得分: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/ 打开提示选项卡,然后选择classic + git选项

enter image description here

现在点击使用提示按钮即可设置。

答案 9 :(得分:0)

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

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

vi .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\] $ "

通过执行以下操作

第3步:源(home)目录中的源.bashrc:

/ rootfolder:〜$ source .bashrc

Step4:重新启动并打开终端并检查cmd。导航到您的GIt repo目录路径,您就完成了。 :)

答案 10 :(得分:0)

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

答案 11 :(得分:0)

这是我使用的简单干净版本:link

enter image description here

答案 12 :(得分:-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)] \$