Ref 对象的 getPeeledObjectId() 和 getObjectId() 有什么区别?

what is the difference between getPeeledObjectId() and getObjectId() of Ref Object?

我正在使用 jgit api 来实现我项目的构建和部署功能(在本地机器中)。我通过命令提示符通过以下命令提交了整个源代码(java 项目)

  1. git add .
  2. git commit -a -m "Initial_Source"

    在这里,我得到的提交 ID 为 cb96c685a5a4338f852a782631df8d1cf5dca21d

  3. git tag Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d

    [cb96c685a5a4338f852a782631df8d1cf5dca21d 是 commitid]

  4. git push

  5. git push --tags

但是当我尝试通过 getPeeledObjectId() 获取提交 ID 时,它正在返回 null

我的密码是

Ref tag = git.getRepository().getRef("Initial_Source");
Ref peeledRef = git.getRepository().peel(tag);
return peeledRef.getPeeledObjectId(); -- this is returning null

但我尝试使用 getObjectId() 而不是 getPeeledObjectId()。它正在提供 commitId。但我想知道什么时候使用 getPeelObjectId()getObjectId().

那些方法是什么?

getPeeledObjectId() 方法在 non-annotated (lightweight) tag:

上始终为 null
 git tag Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d

这将适用于带注释的标签

git tag -a Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d
# or
git tag -m "Initial Source" Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d

由于您的标签是指向 commit(由 git.getRepository().peel(tag) 引用)的指针,getObjectId() 获取其 ID,因此 [=30] 没有任何意义=] 再次:您已经提交了。
参见“What is the difference between an annotated and unannotated tag?

参见porcelain/ListTags.java example:它考虑了两种标签:

List<Ref> call = git.tagList().call();
for (Ref ref : call) {
    System.out.println("Tag: " + ref + " " + ref.getName() + " " + ref.getObjectId().getName());

    // fetch all commits for this tag
    LogCommand log = git.log();

    Ref peeledRef = repository.peel(ref);
    if(peeledRef.getPeeledObjectId() != null) {
        // Annotated tag
        log.add(peeledRef.getPeeledObjectId());
    } else {
        // Lightweight tag
        log.add(ref.getObjectId());
    }
}
  • 正如@VonC 所说,我认为我们无法获得轻量级标签的 ObjectId(即 getPeeledObjectId() 中没有 -a 或 -m 的标签。
  • 我尝试提交一个文件并在没有 -a 或 -m 的情况下标记该文件

    [git 标签 Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d ].

  • 然后运行一个java主程序从中获取对象ID getPeeledObjectId() 显然 returns null.

  • 然后我提交一个文件,然后用-a和-m标记它(任何1就足够了 作为注释标签)

    [git 标记 Appinterface 523a05f9c486e64eba29786a1b8abfc4da421260 -m "Appinterface_commit_tag"]

  • 现在我从 getPeeledObjectId()

  • 获取 objectId