在Unix或GNU脚本环境(例如Linux发行版、Cygwin、OSX)中,确定当前在工作目录中签出哪个Git分支的最佳方法是什么?
这种技术的一个用途是自动标记版本(就像svnversion对Subversion所做的那样)。
请参阅我的相关问题:如何以编程方式确定Git签出是否是标记,如果是,标记的名称是什么?
在Unix或GNU脚本环境(例如Linux发行版、Cygwin、OSX)中,确定当前在工作目录中签出哪个Git分支的最佳方法是什么?
这种技术的一个用途是自动标记版本(就像svnversion对Subversion所做的那样)。
请参阅我的相关问题:如何以编程方式确定Git签出是否是标记,如果是,标记的名称是什么?
当前回答
这是一个解。如果您将它添加到.bashrc中,它将在控制台中显示当前分支。
# git branch
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1) /'
}
$PS1="\$(parse_git_branch)$PS1"
然而,这是相当有限的。但是有一个叫做git sh的伟大项目,它正在做这些事情(甚至更多)。
其他回答
这个适合我。如果您希望返回纯字符串,那么——no-color部分非常重要。
git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
这是一个解。如果您将它添加到.bashrc中,它将在控制台中显示当前分支。
# git branch
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1) /'
}
$PS1="\$(parse_git_branch)$PS1"
然而,这是相当有限的。但是有一个叫做git sh的伟大项目,它正在做这些事情(甚至更多)。
我是这样做的:
git branch | sed --quiet 's/* \(.*\)/\1/p'
输出如下所示:
$ git branch | sed --quiet 's/* \(.*\)/\1/p'
master
$
我在bash文件中使用了这个方法。
git branch | grep '^*' | sed 's/* //'
################bash file###################
#!/bin/bash
BRANCH=$(git branch | grep '^*' | sed 's/* //' )
echo $BRANCH
下面是我的解决方案,适用于PS1,或者自动标记一个版本
如果您在分支签出,您将得到分支名称。
如果你在一个刚初始化的git项目中,你只需要使用@
如果你是无头的,你会得到一个相对于某个分支或标签的漂亮的人的名字,在名字之前有一个“@”。
如果你是无头的,并且不是某个分支或标签的祖先,你只会得到短的SHA1。
function we_are_in_git_work_tree {
git rev-parse --is-inside-work-tree &> /dev/null
}
function parse_git_branch {
if we_are_in_git_work_tree
then
local BR=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD 2> /dev/null)
if [ "$BR" == HEAD ]
then
local NM=$(git name-rev --name-only HEAD 2> /dev/null)
if [ "$NM" != undefined ]
then echo -n "@$NM"
else git rev-parse --short HEAD 2> /dev/null
fi
else
echo -n $BR
fi
fi
}
如果您愿意,可以删除if we_are_in_git_work_tree位;我只是在我的PS1的另一个函数中使用它,你可以在这里完整地查看:PS1行git当前分支和颜色