git describe
Dá a um commit um nome legível baseado na tag mais próxima
O comando 'git describe' nomeia um commit a partir da tag mais próxima que ele alcança: a própria tag se o commit estiver marcado, senão tag-N-gHASH (N commits depois da tag e o hash abreviado). Scripts de build o usam para marcar cada build com uma versão. Por padrão só usa tags anotadas.
Sinopse
git describe [--tags] [--always] [--dirty] [--abbrev=<n>] [<commit-ish>...]Opções
Escolhendo a opção certa
Ler um nome do describe
v1.0-2-g1a2b3c4
| Comando | Significado |
|---|---|
v1.0 | A tag mais próxima |
2 | Commits desde essa tag |
g1a2b3c4 | «g» de git + o hash abreviado |
-dirty | Alterações não commitadas (com --dirty) |
Exemplos
Descrever HEAD
git describev1.0-2-g1a2b3c4: dois commits depois da v1.0.
Incluir tags leves
git describe --tagsConsiderar também tags criadas sem -a.
Nunca falhar
git describe --always --dirtyO hash se não houver tag, -dirty se houver edições locais.
Exemplos de fluxos de trabalho
git describe --tags --always --dirtyCalcular a string de versão
echo "$(git describe --tags --always)" > version.txtGravá-la na build
Solução de problemas
fatal: No names found, cannot describe anything.
Causa: O repositório não tem tags
Crie uma (git tag -a v0.1 -m ...) ou use --always
fatal: No annotated tags can describe ...
Causa: Só existem tags leves
Use --tags, ou recrie a tag com -a
Dicas e armadilhas
Boas práticas
- ✓Use tags anotadas nas versões para o describe funcionar sem --tags.
- ✓Use --always em scripts para que nunca falhem.
Erros comuns
- ✗Receber "No names found" porque o projeto só tem tags leves — adicione --tags.
- ✗Ler o g de -g1a2b3c4 como parte do hash: ele só significa «git».
Perguntas frequentes
Ele usa a tag com menos commits entre ela e o commit descrito.