Eu clonei um repositório git remoto e criei uma nova ramificação a partir da main
ramificação. Agora eu quero obter a tag de repositório mais recente (se existir) em tempo de compilação. Eu consegui obter o hash de commit mais recente em tempo de compilação. Abaixo está meu código
// build.rs
use std::process::Command;
fn main() {
let output = Command::new("git").args(&["rev-parse", "HEAD"]).output().unwrap();
let git_hash = String::from_utf8(output.stdout).unwrap();
println!("cargo:rustc-env=GIT_HASH={}", git_hash);
}
// main.rs
fn main() {
println!("{}", env!("GIT_HASH"));
}
Eu usaria o seguinte comando para obter a tag mais recente (da maneira que você quiser definir):
git describe --tags --abbrev=0
(usandogit describe
).Portanto, esta seria minha solução:
construir.rs
principal.rs
A ideia é executar o script de construção sempre que um arquivo relacionado à tag git no seu sistema for alterado.
Observe que isso resultará em problemas se, por exemplo, você tiver duas tags apontando para o mesmo commit.
Dependendo do seu shell preferido, pode haver opções melhores, mas este parece ser o melhor comando multiplataforma.
Se você estiver trabalhando com um repositório remoto, você deve extrair as tags do repositório remoto usando
git fetch --tags
e então usandogit rev-list --tags <latest commit hash>
para obter a tag do último commit