2017-06-22 158 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

相關問題