Получить красивое имя Git Rev - PullRequest
2 голосов
/ 17 марта 2012

Итак, я знаю, что этот вопрос был задан лотом , но я не нашел подходящих ответов.Я пытаюсь отобразить имя текущего git rev в моем приглашении, но довольно красиво: если я на ветке, мне нужно имя ветви;если это не ветка, я хотел бы, чтобы относительное имя (например, master~2) в моем приглашении.

Сначала я использовал что-то вроде , что вы можете увидеть здесь .Это работало хорошо: у меня было название филиала или номер версии SHA1.Затем я перешел к подходу, основанному на git name-rev, который сначала был замечательным, но затем я заметил, что имя иногда смешивалось: после слияния master в постановку в обеих ветках в моем приглашении было masterУчитывая, насколько я на это полагаюсь, я не могу этого иметь.Но иметь master~2 вместо номера SHA1 было действительно здорово.

Так что я надеюсь, что есть способ объединить оба подхода.Если возможно также отобразить имя тега, я его возьму (хотя я их не очень часто использую - пока ).И самое главное - иметь команды git only, а не искать внутренние файлы git - они могут измениться в какой-то момент.

Спасибо за чтение!

Ответы [ 3 ]

1 голос
/ 04 августа 2013

Вот bash-версия ответа zsh.Я пытался оставить это как комментарий, но я не могу оставлять блоки кода в комментариях.: 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
1 голос
/ 17 марта 2012

Взято из репозитория 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:)

0 голосов
/ 17 марта 2012

Взгляните на git description:

git describe HEAD --all --long

Вы можете настроить его с помощью других опций и получить полезную информацию.Если вы используете его с параметром --tags, вы получите расстояние в коммитах из последнего найденного тега, например,

$ git describe HEAD --tags
1.1-4-g860832e

В моем примере это показывает, что мы на четыре коммита впереди тега 1.1.Он также отображает хэш sha1 в конце после «g», в этом случае это означает, что короткий хеш равен 860832e

...