It really depends on your release plans.
If you are actually going to (attempt to) support multiple releases, semantic major.minor.patch is very useful.
If you're really just going to support only the latest, semantic versioning is probably not so helpful, year.version is easy to figure out chronological differences with.
githash as the only version identifier is a sign that you don't intend to help users track versions. This could be the right choice if you want to release something without expectations of use.