2017-06-22 159 views
1

我为我的项目的构建,部署功能使用jgit api(在本地计算机中)。我通过以下命令Ref对象的getPeeledObjectId()和getObjectId()之间有什么区别?

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

    在这里,我得到提交id作为cb96c685a5a4338f852a782631df8d1cf5dca21d

  3. git tag Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d

    COMMITED经由命令提示整个源(java项目)[cb96c685a5a4338f852a782631df8d1cf5dca21d已提交]

  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 

而是的getPeeledObjectId()我尝试使用getObjectId()。它提供了commitId。但我想知道何时使用getPeelObjectId()getObjectId()

这些方法是什么?

回答

0

的getPeeledObjectId()方法总是空在non-annotated (lightweight) tag

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()); 
    } 
} 
+0

笏是剥离?我应该在哪里使用getPeelObjectId()nd普通getObjectId() – Jothivignesh

+0

@Jothivignesh皮尔正在解引用对象:对于轻量级标记,没有任何可以解引用:它已经指向提交。对于带注释的标签,您需要使用'getPeelObjectId()'来访问提交,因为'getObjectId()'会为您提供标签本身。这是轻量级和带注释标记之间区别的一部分,如https://stackoverflow.com/q/11514075/6309的答案中所述。 – VonC

+0

所以如果我把-a或-m(带注释的标签)放在标签上,那么我可以从getPeelObjectId()获得commitId,否则我必须使用getObjectId().. rit? – Jothivignesh

0
  • 作为@VonC说,我认为我们不能让一个轻量级的标签的ObjectId(即 一标签没有-a或-m)从getPeeledObjectId()。
  • 我试图提交文件和标签,如果没有-a文件或-M

    [混帐 标签Initial_Source cb96c685a5a4338f852a782631df8d1cf5dca21d

  • 然后运行一个java主程序,从 获得对象Id getPeeledObjectId()显然返回null。

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

    [git的标签Appinterface 523a05f9c486e64eba29786a1b8abfc4da421260 -m “Appinterface_commit_tag”]

  • 现在我从getPeeledObjectId越来越OBJECTID()

+0

我编辑了我的答案,使git标签命令更清晰。 – VonC

相关问题