我已经克隆了一个远程 git repo 并从该main
分支创建了一个新分支。现在我想在编译时获取最新的 repo 标签(如果存在)。我能够在编译时获取最新的提交哈希。以下是我的代码
// 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"));
}
我将使用以下命令来获取最新的(无论您想以何种方式定义)标签:(
git describe --tags --abbrev=0
使用git describe
)。因此这是我的解决方案:
构建.rs
主要文件
这个想法是,只要系统上的 git 标签相关文件发生变化,就运行构建脚本。
请注意,如果有两个标签指向同一次提交,这将导致问题。
根据您喜欢的 shell,可能会有更好的选择,但这似乎是最好的跨平台命令。
如果你正在使用远程存储库,则应使用从远程存储库中提取标签
git fetch --tags
,然后使用git rev-list --tags <latest commit hash>
获取最新提交的标签