我使用以下内容在我的bash提示符中显示当前分支名称(通过.bash_profile
):
GetBranch()
{
cat ./.git/HEAD | sed 's+^ref: refs/heads/++'
}
但当我在 not 对应git存储库的目录中时,我收到错误(因为./.git/HEAD does not exist
)。
如何抑制此错误?
答案 0 :(得分:2)
将STDERR重定向到/ dev / null:
GetBranch()
{
cat ./.git/HEAD 2>/dev/null | sed 's+^ref: refs/heads/++'
}
这是一个quick guide on file descriptors,有助于解释2>/dev/null
的工作原理。
或者,您可以使命令以现有的./.git/HEAD
为条件,而不是抑制错误:
GetBranch()
{
if [[ -e "./.git/HEAD" ]]; then
cat ./.git/HEAD 2>/dev/null | sed 's+^ref: refs/heads/++'
fi
}
答案 1 :(得分:2)
首先测试存储库是否存在:
GetBranch()
{
if [ -f .git/HEAD ]
then
sed 's+^ref: refs/heads/++' < .git/HEAD
else
echo "Not a repository" >&2
fi
}
答案 2 :(得分:1)
使用git
本身返回当前已签出的分支,而不是挖掘到存储库。
GetBranch () {
git symbolic-ref --short HEAD 2> /dev/null
}
这将在存储库中的任何目录中运行,而不仅仅是根目录。
答案 3 :(得分:1)
没有直接回答这个问题,但是有很多现有的脚本可以获得git-aware提示。您可能想要使用它们而不是自己编写。例如,请参阅https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh或搜索&#34; git bash提示符&#34;在你最喜欢的搜索引擎。