使用 jGit 构建标签会将其绑定到意外的 ObjectId
Building a tag with jGit binds it to an unexpected ObjectId
在以下代码片段中:
Git git = Git.init().setDirectory(path).call();
File testfile = new File(path, "testfile");
testfile.createNewFile();
git.add().addFilepattern("testfile").call();
RevCommit commit = git.commit().setMessage("test commit #1").call();
Ref tag = git.tag().setObjectId(commit).setName("tag1.0").call();
System.out.println("HEAD: " + git.getRepository().resolve(Constants.HEAD));
System.out.println("COMMIT: " + commit.toString());
System.out.println("TAG: " + tag.getObjectId());
我打印了以下内容:
AnyObjectId[1f74b8249ea41ebbe3305536def4b430130d366c]
commit 1f74b8249ea41ebbe3305536def4b430130d366c 1638417816 ------p
AnyObjectId[10fcef4b65f98c227c0639d207ee8f550c030b92]
提交 10fcef4b65f98c227c0639d207ee8f550c030b92
没有出现在存储库的任何地方,这个标识符是从哪里来的?最重要的是,为什么 tag.getObjectId()
不是 return 应该指向的标识符 1f74b8249ea41ebbe3305536def4b430130d366c
?
我已经尝试了很多事情,我可以从标记中获取正确的提交引用的唯一方法是调用 RevTag::getObject()
(RevTag
通过 RevWalk
获取)。
默认情况下,JGit 的 TagCommand
创建一个带注释的标签。
正如 @torek 评论的那样,returned ref 指向标签对象。
要创建未注释的标签,请使用 setAnnotated(false)
。然后该命令将 return 一个指向标记提交的引用。
此 post 解释了如何查看带注释标签的目标提交 ID 以及如何在 JGit 中区分带注释和未带注释的标签:
List commits associated with a given tag with JGit
在以下代码片段中:
Git git = Git.init().setDirectory(path).call();
File testfile = new File(path, "testfile");
testfile.createNewFile();
git.add().addFilepattern("testfile").call();
RevCommit commit = git.commit().setMessage("test commit #1").call();
Ref tag = git.tag().setObjectId(commit).setName("tag1.0").call();
System.out.println("HEAD: " + git.getRepository().resolve(Constants.HEAD));
System.out.println("COMMIT: " + commit.toString());
System.out.println("TAG: " + tag.getObjectId());
我打印了以下内容:
AnyObjectId[1f74b8249ea41ebbe3305536def4b430130d366c]
commit 1f74b8249ea41ebbe3305536def4b430130d366c 1638417816 ------p
AnyObjectId[10fcef4b65f98c227c0639d207ee8f550c030b92]
提交 10fcef4b65f98c227c0639d207ee8f550c030b92
没有出现在存储库的任何地方,这个标识符是从哪里来的?最重要的是,为什么 tag.getObjectId()
不是 return 应该指向的标识符 1f74b8249ea41ebbe3305536def4b430130d366c
?
我已经尝试了很多事情,我可以从标记中获取正确的提交引用的唯一方法是调用 RevTag::getObject()
(RevTag
通过 RevWalk
获取)。
默认情况下,JGit 的 TagCommand
创建一个带注释的标签。
正如 @torek 评论的那样,returned ref 指向标签对象。
要创建未注释的标签,请使用 setAnnotated(false)
。然后该命令将 return 一个指向标记提交的引用。
此 post 解释了如何查看带注释标签的目标提交 ID 以及如何在 JGit 中区分带注释和未带注释的标签: List commits associated with a given tag with JGit