Git tag discovery, ref resolution, temp-directory checkout, and tag creation.
All operations use gix (gitoxide) — a pure-Rust git implementation with
no C dependencies, enabling cross-compilation to all Rust targets.
Tag creation and deletion use the git subprocess for simplicity.