eclipse - 使用 JGit 获取标签消息

标签 eclipse tags message jgit

我需要每次提交时获取关联标签的名称和消息。

我设法获取与我的提交关联的标签名称。但我收不到消息。我尝试过这样的:

String nameTag = "";

List<Ref> call = new Git(git.getRepository()).tagList().call(); // get all tags from repository

for (Ref ref: call) {
    if ((ref.getObjectId().getName()).equals(commit.getName())) {
        Map<ObjectId, String> names = git.nameRev().add(ref.getObjectId()).addPrefix("refs/tags/").call();
        nameTag = names.get(ref.getObjectId());
        System.out.println("Commit " + commit.getName() + "has tag" + nameTag);
    }
}

我尝试为找到的每个引用创建 RevTag:

AnyObjectId obj = ref.getObjectId();
if(obj instanceof RevTag) {
    RevTag tag = walk.parseTag(obj);
    System.out.println(tag.getFullMessage()); 
}

但返回的对象 ID 绝不是 RevTag。异常消息是:

Object ... is not a tag . 

如何创建解析 Ref 的 RevTag?

最佳答案

您不必使用 RevWalk#parseTag() 解析标签。该方法仅用于解析带注释的标签。

要区分另一个,您甚至可以使用 parseTag (或者有更好的方法吗?)

RevTag tag;
try {
  tag = revWalk.parseTag(ref.getObjectId());
  // ref points to an annotated tag
} catch(IncorrectObjectTypeException notAnAnnotatedTag) {
  // ref is a lightweight (aka unannotated) tag
}

带注释的标记指向提交对象,因此具有作者、日期、消息等,而提交对象又指向带标记的提交。

轻量级标签直接引用标记的提交(很像分支,但只读),因此不能有消息。

有关带注释与轻量级标签的更多信息:

关于eclipse - 使用 JGit 获取标签消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29892210/

相关文章:

java - 如何找到正则表达式模式而不将其包含在结果中?

java - Eclipse 的 Jess 插件无法工作?并且未安装

hadoop - Hadoop 中的元数据扩展

javascript 函数中 HTML 表单标记内的 Javascript

ios - MSMessagesViewController 委托(delegate)为事件对话返回 nil

eclipse - 如何在 Maven 中解析 'Offline/Missing artifact org.geotools:gt-shapefile:jar:17-SNAPSHOT'?

java - 如何在 Eclipse 中为 Java 文本编辑器更改字体大小?

javascript - 带有警报的 onchange 在 ie 中不起作用

R 使用消息打印表格

c++ - 按住键盘输入时犹豫?