Added `readonly` annotation for read-only variables
`git rev-parse --short` -> `git describe --always`

Now it can display tag names correctly if checking out any annotated
tags.  In the worst case `git describe --always` will produce the same
result as `git rev-parse --short` if no branches or tags are found.