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

时间:2017-06-22 07:27:43

标签: java git github jgit

我正在使用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
  6. 但是当我试图通过getPeeledObjectId()获取提交ID时,它返回null

    我的代码是

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

    但我尝试使用getPeeledObjectId()代替getObjectId()。它给出了commitId。但我想知道何时使用getPeelObjectId()getObjectId()

    这些方法是什么?

2 个答案:

答案 0 :(得分:0)

non-annotated (lightweight) tag上的getPeeledObjectId()方法始终为null:

 git tag Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d

这适用于带注释的标签

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

由于您的标记是指向提交的指针(由git.getRepository().peel(tag)引用),getObjectId()获取其ID,因此没有任何内容可以“剥离”:您已经拥有提交。
请参阅“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());
    }
}

答案 1 :(得分:0)

  • 正如@VonC所说,我认为我们无法获得轻量级标签的ObjectId(即 getPeeledObjectId()中没有-a或-m的标记。
  • 我尝试提交文件并标记该文件而不使用-a或-m

    [ git 标签Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d ]。

  • 然后运行java主程序以获取对象ID getPeeledObjectId()显然返回null。

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

    [ git tag Appinterface 523a05f9c486e64eba29786a1b8abfc4da421260 -m&#34; Appinterface_commit_tag&#34; ]

  • 现在我从getPeeledObjectId()获取objectId