git - 如何检查 HEAD 是否被标记

标签 git rust

这是我尝试过的一个例子:

cd /tmp
cargo new --bin foo
cd foo
cat > src/main.rs << EOF
extern crate git2;

use git2::{Repository, ObjectType};

fn main() {
    let repo = Repository::open("/tmp/foo").unwrap();
    let git_ref = repo.head().unwrap();
    git_ref.peel(ObjectType::Tag).unwrap();
}
EOF
cargo add git2
git add .
git commit --message "foo"
git tag foo
cargo run

我感到 panic :

thread 'main' panicked at 'called Result::unwrap() on an Err value: Error { code: -12, klass: 11, message: "the git_object of id \'33030777b0a6b61f631be64c3f1cb7d66b8f3082\' can not be successfully peeled into a tag (git_otype=4)." }', /checkout/src/libcore/result.rs:906:4

我错过了什么?

最佳答案

HEAD 通常不引用标签;它引用另一个引用(例如 refs/heads/master),它引用一个提交,引用一个树。

剥离,据我理解,就是对被其他对象或引用所引用的对象进行解引用的过程。但是,由于 HEAD 不引用标记,因此您不能剥离 HEAD 并期望获得标记。


Git 有两个独立的标签 概念。 标签引用 只是refs/tags/ 下的引用。 带注释的标签 是 Git 数据库中的对象,就像提交、树和 blob 一样。标记引用可以引用任何类型的对象,但通常它们会引用提交或标记对象。

无论您是在带注释的标签还是任何类型的标签之后,第一步都是相同的:您必须迭代 refs/tags/ 中的引用并检查它们是否有任何剥离与 HEAD 剥离到相同的提交。如果您对带注释的标签特别感兴趣,可以检查标签引用是否剥离到标签对象。

关于git - 如何检查 HEAD 是否被标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47500612/

相关文章:

windows - 外部 git difftool 在 Windows 上不起作用

git:我怎样才能知道是否有一个分支的 pull 请求?

mongodb - "The trait bound ` Bson : From<u128> ` is not satisfied" error when using the doc! 具有 u128 属性的宏

memory - 如何将拥有的盒子发送给子任务?

rust - 设置 GTK 应用程序标题

server - Rust echo 服务器和客户端使用 futures 永远阻塞自己

c++ - netbeans c++ 跨平台(mac和linux)同时与git

android - 开发服务器返回响应错误代码 500 - react native - ./configs/main

eclipse - 将 Eclipse 项目导出到 GitHub 的最佳方式

css - mdbook中如何配置自定义字体,在生成的书籍中自动使用?