我需要每次提交时获取关联标签的名称和消息。
我设法获取与我的提交关联的标签名称。但我收不到消息。我尝试过这样的:
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/