所以我知道这个问题已经被问了很多,但我找不到合适的答案。我想在我的提示中显示当前git rev的名称,但是以一种漂亮的方式:如果我在分支上,我想要分支的名称;如果它不是分支,我想在我的提示中使用相对名称(即master~2
)。
起初,我使用what you can see here之类的东西。它工作得很好:我有分支的名称,或rev SHA1号码。然后我转移到基于git name-rev
的接近,一开始很棒,但后来我注意到这个名字有时混淆了:将master
合并到分段后,在两个分支上我都{{1}在我的提示中。考虑到我对此的依赖程度,我无法做到这一点。但是使用master
代替SHA1号非常棒。
所以我希望有一种结合两种方法的方法。如果也可以显示标签名称,我会接受它(虽然我没有太多使用它们 - 还)。顶部将只有git命令,没有查找git内部文件 - 它们可能会在某些时候发生变化。
感谢阅读!
答案 0 :(得分:1)
取自zsh-git存储库:https://github.com/jcorbin/zsh-git/blob/master/functions/zgitinit#L70
name=$(git symbolic-ref -q HEAD)
if [ $? -eq 0 ]; then
if [[ $name == refs/(heads|tags)/* ]]; then
name=${name#refs/(heads|tags)/}
fi
else
name=$(git name-rev --name-only --no-undefined --always HEAD)
if [ $? -ne 0 ]; then
return 1
elif [[ $name == remotes/* ]]; then
name=${name#remotes/}
fi
fi
您也可以考虑使用zsh:)
答案 1 :(得分:1)
这是zsh答案的bash版本。我试着将其留作评论,但我不能在评论中发布代码块。 :P
name=$(git symbolic-ref -q HEAD)
if [[ -n "$name" ]]; then
name="${b#refs/heads/}"
else
name=$(git name-rev --name-only --no-undefined --always HEAD)
name="${name#tags/}"
name="${name#remotes/}"
fi
答案 2 :(得分:0)
看一下git describe:
git describe HEAD --all --long
您可以使用其他选项调整它并获得一些不错的信息。如果将它与--tags选项一起使用,则可以获得最新发现标记的提交距离,例如
$ git describe HEAD --tags
1.1-4-g860832e
在我的示例中,它显示我们在标记1.1之前提交了四个提交。它还在'g'后面的末尾显示sha1哈希值,在这种情况下,它表示短哈希是860832e