获得相当的git rev名称

时间:2012-03-17 18:27:51

标签: git branch command-prompt

所以我知道这个问题已经被问了很多,但我找不到合适的答案。我想在我的提示中显示当前git rev的名称,但是以一种漂亮的方式:如果我在分支上,我想要分支的名称;如果它不是分支,我想在我的提示中使用相对名称(即master~2)。

起初,我使用what you can see here之类的东西。它工作得很好:我有分支的名称,或rev SHA1号码。然后我转移到基于git name-rev的接近,一开始很棒,但后来我注意到这个名字有时混淆了:将master合并到分段后,在两个分支上我都{{1}在我的提示中。考虑到我对此的依赖程度,我无法做到这一点。但是使用master代替SHA1号非常棒。

所以我希望有一种结合两种方法的方法。如果也可以显示标签名称,我会接受它(虽然我没有太多使用它们 - )。顶部将只有git命令,没有查找git内部文件 - 它们可能会在某些时候发生变化。

感谢阅读!

3 个答案:

答案 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