cshell命令行显示当前git branch名字
2017-06-16 10:44
190 查看
Git可以创建很多的branch,而且可以很方便的在branch之间进行切换。
那么如何快速的知道我们现在处在哪个branch上面呢?
最简单的方法:
执行 #git branch
此时,当前所有的git branch都将列举出来,并且当前branch名字前面会有 “*",而且当前branch名字颜色也会不一样;
本文介绍另一种方法,可以直接在命令行中显示当前branch name,效果图如下:
上图中shell命令行共显示3个内容,具体如下:
* XALOGIN2 : 表示hostname
* it/l1/if1_prach_scripts :表示当前目录
* env :表示当前branch的名字
实现方法如下:
1:在.cshrc中定义颜色(要显示的内容,可以按已定义的颜色进行显示);
同时定义变量git_branch_name(初始化为null)存储当前branch name
2:设置shell命令行要显示的内容,及所采用的颜色
其中:
* `hostname :显示主机名
* %c4
:显示当前路径(其中4表示,只显示当前路径之前的4层路径;如果想多显示,可以自己进行更改)
* $git_branch_name:为自己定义的一个变量,该变量用来存储当前git branch 的名字
需要注意的是:上面只是定义了要显示的内容和格式,为了正确显示git branch名字,就需要实时的更新git_branch_name变量及shell命令行的显示;
1:如何实时更新git_branch_name变量
在.git目录中,有一个HEAD文件,用于保存当前branch的名字,这里的方法,就是循环的去查找父目录,如果找到HEAD,就读出当前branch名字赋值给git_branch_name,如果没找到,就赋值为null;
这里由于cshell不支持function,因此这一个功能单独放在一个文件(.update_git_branch_name)中,然后在.cshrc中source该文件。(之前试过将该文件内容直接写入.cshrc,发现可以正常显示,但有一些别的问题,就单独放在文件中了,如果大家有好的方法,就可以不用再多这个文件)
在写这个文件时,刚开始一直有问题,不知道如何拿到父目录,最终导致while死循环,最后发现dirname可以用;其实算法很简单,由于shell不太会,也是从网上找的代码,改了改bug。
2:何时需要更新shell命令行的显示
因为在进行目录切换时,有可能切换到一个git中,因此在进行目录切换时,需要更新命令行的显示;
此外,在git checkout进行branch切换时,也需要更新命令行的显示;
具体更新方法是,通过alias,更改cd及git checkout命令,在每次执行cd及git checkout时,都刷新一下命令行的显示,具体如下:
这里需要注意,git checkout需要替换成gc。由于没有找到方法直接替换git checkout,因此,这里只能使用gc来替换(好像alias中,命令不能有空格,所以只能用gc了;如果使用git checkout,那么shell命令行中,branch名字是不会更新的)
那么如何快速的知道我们现在处在哪个branch上面呢?
最简单的方法:
执行 #git branch
此时,当前所有的git branch都将列举出来,并且当前branch名字前面会有 “*",而且当前branch名字颜色也会不一样;
本文介绍另一种方法,可以直接在命令行中显示当前branch name,效果图如下:
上图中shell命令行共显示3个内容,具体如下:
* XALOGIN2 : 表示hostname
* it/l1/if1_prach_scripts :表示当前目录
* env :表示当前branch的名字
实现方法如下:
1:在.cshrc中定义颜色(要显示的内容,可以按已定义的颜色进行显示);
同时定义变量git_branch_name(初始化为null)存储当前branch name
2:设置shell命令行要显示的内容,及所采用的颜色
set git_branch_name="null" set normal="%{\e[m%}" set black="%{\e[0;30m%}" set red="%{\e[0;31m%}" set green="%{\e[0;32m%}" set yellow="%{\e[0;33m%}" set blue="%{\e[0;34m%}" set magenta="%\e[0;35m%}" set cyan="%{\e[0;36m%}" set white="%{\e[0;37m%}"
其中:
* `hostname :显示主机名
* %c4
:显示当前路径(其中4表示,只显示当前路径之前的4层路径;如果想多显示,可以自己进行更改)
* $git_branch_name:为自己定义的一个变量,该变量用来存储当前git branch 的名字
需要注意的是:上面只是定义了要显示的内容和格式,为了正确显示git branch名字,就需要实时的更新git_branch_name变量及shell命令行的显示;
1:如何实时更新git_branch_name变量
在.git目录中,有一个HEAD文件,用于保存当前branch的名字,这里的方法,就是循环的去查找父目录,如果找到HEAD,就读出当前branch名字赋值给git_branch_name,如果没找到,就赋值为null;
set dir=$cwd set git_branch_name="null" while("$dir" != "/") if (-f "$dir/.git/HEAD") then set head=`cat $dir/.git/HEAD` if ("$head" != "ref:\ refs/heads/*") then set git_branch_name=`echo "$head" | sed -e "s#.*heads/##"` else if ($head != '') then set git_branch_name="(detached)" else set git_branch_name="(unknown)" endif break endif set dir=`dirname $dir` end
这里由于cshell不支持function,因此这一个功能单独放在一个文件(.update_git_branch_name)中,然后在.cshrc中source该文件。(之前试过将该文件内容直接写入.cshrc,发现可以正常显示,但有一些别的问题,就单独放在文件中了,如果大家有好的方法,就可以不用再多这个文件)
在写这个文件时,刚开始一直有问题,不知道如何拿到父目录,最终导致while死循环,最后发现dirname可以用;其实算法很简单,由于shell不太会,也是从网上找的代码,改了改bug。
2:何时需要更新shell命令行的显示
因为在进行目录切换时,有可能切换到一个git中,因此在进行目录切换时,需要更新命令行的显示;
此外,在git checkout进行branch切换时,也需要更新命令行的显示;
具体更新方法是,通过alias,更改cd及git checkout命令,在每次执行cd及git checkout时,都刷新一下命令行的显示,具体如下:
set prompt="$cyan`hostname`:$green~%c4$magenta@$yellow$git_branch_name$normal >" alias setprompt `set prompt="$cyan`hostname`:$green~%c4$magenta@$yellow$git_branch_name$normal >"' alias update_git_branch_name 'source ./.update_git_branch_name' alias cd 'chdir \!* && update_git_branch_name && setprompt' alias gc 'git checkout \!* && update_git_branch_name && setprompt'
这里需要注意,git checkout需要替换成gc。由于没有找到方法直接替换git checkout,因此,这里只能使用gc来替换(好像alias中,命令不能有空格,所以只能用gc了;如果使用git checkout,那么shell命令行中,branch名字是不会更新的)
相关文章推荐
- 在Terminal中显示git的当前branch
- 自定义iTerm2标题栏和bash显示当前git branch信息
- git在MAC,Linux的terminator(命令行)下自动显示当前分支
- linux 命令行终端显示git 当前所在分支
- git 彩色显示当前branch
- git 彩色显示当前branch
- Linux下命令行显示当前全路径方法
- shell提示符显示git当前分支
- Linux下命令行显示当前全路径方法
- ubuntu shell显示git branch
- 在 vim的状态栏显示 当前行所在的函数名字
- 初识Ubuntu——使用SecureCRT连接Ubuntu&命令行显示当前路径
- windows如何在cmd命令行提示符中显示当前的时间
- 解决git detached 状态 恢复分支名字的显示
- 命令行目录太长?只显示当前目录方法
- repo sync同步下来之后,git branch 显示“no branches”
- ubuntu 新建用户后 不能使用TAB键、上下键,命令行不显示当前路径的解决
- linux命令行显示主机名和当前目录
- 如何在linux console中显示当前你在的branch?
- git版本控制:如何处理当前分支为*(no branch)的情况