在微博上看到ghosTM55在终端可以实时展现出当前运行的分支,觉得很奇特,于是google了一把。这里面存在两个内容,第一个bash,第二个是git

bash基础:

了解到linux的shell存在PS1, PS2,PS3, PS4,这些都作为环境变量存在。

PS1表示的默认交互提示,在ubuntu-12.04中的默认值是 "\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$",也就是我们通常可以看到的:

  damon@damon:~/pyenv/bin$

在PS1中

\u -- 表示用户名

\h -- 表示主机名

\w -- 当前目录的全局路径,如果是home目录,显示~

\s -- 表示的bash

\v -- 表示版本

所以你可以修改默认的提示符:

  export PS1="\u@\h-\v \w> "

按照上面的提示,显示的就是

  damon@damon-4.2 ~/pyenv/bin

通常情况下,我们只会用到PS1,但是当我们需要继续交互的时候,就会用到PS2,比方说输入命令行使用\来进行下一行处理。例如简单一些:

  ls \

则会出现下面的提示符号,也就是PS2的内容

>

通常我们会用到的就这两个

shell在执行PS1前,会先执行PROMPT_COMMAND这个指令,并且显示在PS1之前。所以我们可以在终端的PROMPT_COMMAND上做一些操作

然后得到显示一些特殊的内容,也就是ghosTM55上实时显示git分支。

我们先试验一下,修改PROMPT_COMMAND为下面的值:

export PROMPT_COMMAND="echo -n [$(date +%H:%M:%S)]"

那么提示符号将显示为:

[21:40:17]damon@damon:~/pyenv/bin$

注意时间是定格的

可以使用unset方法来取消PROMPT_COMMAND

git基础:

git是存在分支的,当前所在的git分支可以通过git branch来察看。

另外一种方式,获取.git/HEAD文件中的内容,格式是:

ref: refs/heads/BRANCH-NAME

于是有两种方案:

一,用下面指令替换PS1

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

但是存在问题,那就是每次shell活动,都要启动一个git和sed的进程,开销会有些大。

二、先定义一个git分支的查询方式:

function find_git_branch {
local dir=. head
until [ "$dir" -ef / ]; do
if [ -f "$dir/.git/HEAD" ]; then
head=$(< "$dir/.git/HEAD")
if [[ $head == ref:\ refs/heads/* ]]; then
git_branch=" ${head#*/*/}"
elif [[ $head != '' ]]; then
git_branch=' (detached)'
else
git_branch=' (unknown)'
fi
return
fi
dir="../$dir"
done
git_branch=''
}

然后用下面的方法替换:

PROMPT_COMMAND="find_git_branch; $PROMPT_COMMAND"

当然最后我们可以用下面的方式替换PS1

green=$'\e[1;32m'
magenta=$'\e[1;35m'
normal_colours=$'\e[m' PS1="\[$green\]\u@\h:\w\[$magenta\]\$git_branch\[$green\]\\$\[$normal_colours\] "
这样就可以在PS1中的颜色知道当前的状态。

这儿有一份相关的说明:

http://aaroncrane.co.uk/2009/03/git_branch_prompt/

这儿有另一份中文说明:

http://blog.chinaunix.net/uid-28464347-id-3439455.html

如何在终端实时展现git分支的更多相关文章

  1. ubuntu使用git时,终端不显示git分支。

    1:问题描述: 在Windows环境下习惯使用git bash操作git分支,最近学习linux环境,发现linux环境终端不显示git分支,相关现象如下:      期望效果是: 我的linux环境 ...

  2. centos ssh终端下高亮显示git分支名

    #set git branch green=$'\e[1;32m' magenta=$'\e[1;35m' normal_colours=$'\e[m' function find_git_branc ...

  3. MacBook设置终端颜色,补全忽略大小写,设置命令别名alias,设置vim,设置显示git分支

    1.启用终端颜色 修改配置文件 $ vim .bash_profile #enables colorin the terminal bash shell export export CLICOLOR= ...

  4. 能显示git分支的终端提示配置

    之前都是跟随潮流,安装zsh然后oh-my-zsh,选一个看起来顺眼的主题,一通瞎配置,很酷炫. 可是即使只有一个git插件,oh-my-zsh每次启动的时候都很慢,起码有好几秒,而且有时候zsh还会 ...

  5. svn与git区别简介,git分支操作在mac客户端soureTree和使用命令行如何实现

    svn与git区别简介: 性能方面(经过实践的) svn:下载速度慢,因为它其中的源文件太多,并且在show log日志的时候每次都需要去服务器拉取,速度很慢 git:下载速度快,并且git clon ...

  6. 开发与测试整体过程中的Git分支merge流程

    开发与测试整体过程中的Git分支merge流程 Git分支merge之开发流程 首先在Gitlab上有个仓库存储着原始的项目代码,其中包含一个叫master的分支.然后可能按功能进行分配,由不同的开发 ...

  7. 介绍一个成功的 Git 分支模型 Release 分支

    英文原文: http://nvie.com/posts/a-successful-git-branching-model/ 中文版: 在这篇文章中,我提出一个开发模型.我已经将这个开发模型引入到我所有 ...

  8. Git 分支模型

    翻译自:https://nvie.com/posts/a-successful-git-branching-model/ 在这篇文章中,主要介绍 Git 分支模型.不会谈论任何项目的细节,只讨论分支策 ...

  9. 一个成功的Git分支模型

    原文: http://www.juvenxu.com/2010/11/28/a-successful-git-branching-model/ 本文中我会展示一种开发模型,一年前该模型就已经被我用在所 ...

随机推荐

  1. Apache axis2 + Eclipse 开发 WebService

    yd小结注意:1.axis2的2个插件的版本必须与引入的jar包匹配,如果不同则可能报以下错误 “没有实现序列化方法”或 “org.apache.axis2.databinding.utils.wri ...

  2. [MFC] MFC音乐播放器 傻瓜级教程 网络 搜索歌曲 下载

    >目录< >——————————————————————< 1.建立工程  1.建立一个MFC工程,命名为Tao_Music 2.选择为基本对话框 3.包含Windows So ...

  3. [公告]这里的博客将不再更新,最新博客请移步至blog.coderzh.com

    公告:我的博客已迁移至独立博客:http://blog.coderzh.com/  感谢大家支持!同时欢迎关注我的微信公众号:hacker-thinking <---- 扫描左侧二维码关注

  4. 注册asp.net

    %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

  5. paip.提升性能----jvm参数调整.txt

    paip.提升性能----jvm参数调整.txt 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.n ...

  6. 64-bit Tips

    终究还是来了.Apple下发了支持64位的最后通牒: As we announced in October, beginning February 1, 2015 new iOS apps submi ...

  7. MapReduce之单词计数

    最近在看google那篇经典的MapReduce论文,中文版可以参考孟岩推荐的 mapreduce 中文版 中文翻译 论文中提到,MapReduce的编程模型就是: 计算利用一个输入key/value ...

  8. 命令行将本地代码上传到github及修改github上代码

    第一步:建立git仓库 cd到你的本地项目根目录下,(这是我的细目目录) 执行git命令 git init 第二步:将项目的所有文件添加到仓库中 git add . 如果想添加某个特定的文件,只需把. ...

  9. UIButton的titleEdgeInsets和imageEdgeInsets属性

    转:http://www.cnblogs.com/huichun/p/3419596.html uiButton控件上自带了一个uiLabel类型的子控件和一个uiImageView类型的子控件,如果 ...

  10. (ETW) Event Tracing for Windows 入门 (含pdf下载)

    内容提纲 • ETW 介绍 • ETW 使用 • ETW 监控本机Demo • ETW 监控远程机器的思路 • 底层类库:EventSource 介绍 • 底层类库:TraceEvent 介绍 ETW ...